• flash菜单与asp.net进行交互.


       最近想做一个flash的菜单与asp.net进行交互. 参考了很多网上的资料,最后有以下心得,写出来记一下。

    一、动态加载菜单
        菜单的内容如下(menu.xml):
    <?xml version="1.0" encoding="utf-8"?>
    <navigation>
     <menu id="2" menutext="编辑角色" menuurl="EditRole.aspx">
     </menu>
    <menu id="4" menutext="应用程序分配" menuurl="PrincipalInApp.aspx">
     </menu>
     <menu id="5" menutext="权限管理" menuurl="PrincipalInResource.aspx">
    </menu>
    </navigation>

    如果动态加载呢?

      1)把以menu.xml文件放到网站的根目录之下,然后在flash的as中写如下的as脚本.
      
    mymenu = new XML();
    mymenu.load("menu.xml");
    mymenu.ignoreWhite = true;
    mymenu.onLoad = findThefild;
    var passItOn = "";
    menu_text = "";
    var menu_array = new Array();
    var submenu_array = new Array();
    var menuurl_array = new Array();
    var submenuurl_array = new Array();
    var tempArray:Array = new Array();


    这样就可以把菜单加载到flash中,至于如何显示,就自己进行处理了.


     二、  给菜单中添加动态参数.
         我们很多时间使用的url都是如EditRole.aspx?rolename=role1之类,此时应该如何把"?rolename=role1"动态的传给flash呢.
         我试验了很多方法,最后的结果如下. 
    1)  说一下有了flash之后的asp.net页面的生成顺序.例如我的页面是editrole.aspx在此页面中有一个flash菜单.
         editrole.aspx-->flash-->与flash通信的页面.
    2)  如何把动态参数传给flash呢,我使用的是xml让asp.net与flash进行通信.
    3)  那么动态参数如何得到呢?这就要借用第三个页面,也就是专门用来与flash进行交互的页面.而不能使用所点击的菜单的页面.
    4)  如上在第一个打开的页面如EditRole.aspx?rolename=role1中把"?rolename=role1"保存到cookie或缓存或seession中,
          然后则专门与flash进行通信的页面把"?rolename=role1"编写成xml,然后reponse.wirte(参数xml字符串),传给flash.

        代码:

          1.editrole.aspx页面中的代码.
           protected void Page_Load(object sender, EventArgs e)
            {
                this.txtUserName.Text = this.UserName;
                //this.Description.Text = ReponseXML();
                if (!IsPostBack)
                {
                    ShowUserInfo();
                   this.WirteCookie();
                }

               
            }
           
             public void WirteCookie()
            {
           
                //加密程序提供程序的名称
                string symmProvider = "DESCryptoServiceProvider";
                //需要加密的xml字符串
                string stringToEncrypt = this.ReponseXML();
                //加密后的字符串
                string encryptedContentsBase64 = Cryptographer.EncryptSymmetric(symmProvider, stringToEncrypt);

          //写cookies
                Response.Cookies["UserSettings"]["uid"] = encryptedContentsBase64;

                Response.Cookies["UserSettings"]["ur"] =this.UserRole;
                    Response.Cookies["UserSettings"].Expires = DateTime.Now.AddHours(1);

      
               
            }

               protected string ReponseXML()
            {
            string param="";
                 int index=Request.Url.ToString().IndexOf("?");
              if (index>0)
              {
                   param=Request.Url.ToString().Substring(index);
             
              }
            
              return  "<LOGIN><USRENAME name=\"user\" right=\"1\" urlParam=\"" + param + "\">"+param+"</USERNAME></LOGIN>";
               
            }
    //与flash进行交互的页面.
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class XmlRepley : IHttpHandler
        {

            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/xml";
             //   context.Response.Write("Hello World");

                string symmProvider = "DESCryptoServiceProvider";
                string stringToEncrypt = this.GetUID(context);
                string decryptedContentsBase64 = Cryptographer.DecryptSymmetric(symmProvider, stringToEncrypt);


               context.Response.Write(decryptedContentsBase64);
            }

            public string GetUID(HttpContext context)
            {
                string uid = String.Empty;
                if (context.Request.Cookies["UserSettings"] != null)
                {

                    if (context.Request.Cookies["UserSettings"]["uid"] != null)
                    { uid =context.Request.Cookies["UserSettings"]["uid"]; }

                }
                return uid;

            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }

      
      
      
       //flash中as代码
      
      
    //-----------------------------------------------------------
    //鼠标点击菜单时
    //-----------------------------------------------------------
    function itemEvent(mc:MovieClip,url:String)
    {
     
     mc.btn.onRelease = function()
     {

    loginXml = new XML(); // 注释1
    loginElement = loginXml.createElement("LOGIN"); // 注释2
    // name node
    nameElement = loginXml.createElement("USERNAME"); // 注释3
    nameNode = loginXml.createTextNode("name"); // 注释4
    nameNode.nodeValue = _root.username; // 注释5
    nameElement.appendChild(nameNode); // 注释6
    // pwd node
    pwdElement = loginXml.createElement("PWD"); // 注释7
    pwdNode = loginXml.createTextNode("pwd");
    pwdNode.nodeValue = _root.pwd;
    pwdElement.appendChild(pwdNode);
    loginElement.appendChild(nameElement); // 注释8
    loginElement.appendChild(pwdElement); // 注释9


    loginXml.appendChild(loginElement); // 注释10

    xmlRepley = new XML(); // 注释11


    xmlRepley.onLoad = onLoginReply; // 注释12
    function onLoginReply (success) {
    if (success) { // 注释13

    if (xmlRepley.firstChild.firstChild.attributes.right == "1") { // 注释14
    getURL(url+xmlRepley.firstChild.firstChild.attributes.urlParam, "_self");

    }
    else
    {
     getURL(url+"?q=错误", "_self");
    }
    }
    }
    loginXml.sendAndLoad("XmlRepley.ashx", xmlRepley); // 注释15

     }
    }

     

     三、加载动态菜单项   

      以上的菜单都是flash去读xml菜单文件,那么如果我们有多个不同类型的菜单,则要做多个不同的flash,
      而这几个不财的flash中,如果菜单样式一样,只不过是菜单的内容不一样,那么实际上是去读不同的xml菜单文件.
      那么有没有办法去实现有程序去给定一个flash菜单的xml数据源呢?
     
       我试验了很多方法,最后的结果如下.
       1)说一下有了flash之后的asp.net页面的生成顺序.例如我的页面是editrole.aspx在此页面中有一个flash菜单.
       editrole.aspx-->flash-->与flash通信的页面.
       2)如何把xml菜单传给flash呢,我使用的是xml让asp.net与flash进行通信.
       

          代码
      1)在flash的as中写如下的as脚本,得到xml文件菜单.
         
    mymenu = new XML();
    mymenu.load("SendXmlMenu.ashx");
    mymenu.ignoreWhite = true;
    mymenu.onLoad = findThefild;
    var passItOn = "";
    menu_text = "";
    var menu_array = new Array();
    var submenu_array = new Array();
    var menuurl_array = new Array();
    var submenuurl_array = new Array();
    var tempArray:Array = new Array();


    2)在主角色页面如showRoleMenu.aspx页面中写如下代码
     protected void Page_Load(object sender, EventArgs e)
            {
                Response.Cookies["UserSettings"]["ur"] = "r"; //新页面要打开的菜单.
                Response.Cookies["UserSettings"].Expires = DateTime.Now.AddHours(1);  

            }
           
            在主用户页面如showUserMenu.aspx页面中写如下代码
           
     protected void Page_Load(object sender, EventArgs e)
            {
                Response.Cookies["UserSettings"]["ur"] = "u"; //新页面要打开的菜单.
                Response.Cookies["UserSettings"].Expires = DateTime.Now.AddHours(1);  

            }
           
                  
       3)在SendXmlMenu.ashx中写以下代码进行xml菜单的传给flash.
      

       [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class SendXmlMenu : IHttpHandler
        {

            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/xml";
                context.Response.Write(ReadXmlMenu(context));
               
            }
            public string ReadXmlMenu(HttpContext context)
            {
                string ur = this.GetUserRole(context);
                System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
                string path=context.Request.PhysicalPath.Substring(0,context.Request.PhysicalPath.LastIndexOf("\\"));
                path = path + "\\menu\\";
                switch(ur.ToLower())
                {
                    case "u"://这个参数通过cookie得到.
                        xmldoc.Load(path + "usermenu.xml");
                        return xmldoc.OuterXml;
                    case "r":
                        xmldoc.Load(path + "rolemenu.xml");
                        return xmldoc.OuterXml;
                    default:
                        return String.Empty;

                }

            }

            public string GetUserRole(HttpContext context)
            {
                string ur = String.Empty;
                if (context.Request.Cookies["UserSettings"] != null)
                {

                    if (context.Request.Cookies["UserSettings"]["ur"] != null)
                    { ur = context.Request.Cookies["UserSettings"]["ur"]; }

                }
                return ur;

            }

            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }

    如果有什么不足的地方请指正。

  • 相关阅读:
    jq随手写图片放大
    solr查询语句示例
    solr使用语法笔记
    PHP的输出缓冲区(转)
    利用fsockopen可实现异步成功访问
    mysql自动加入添加时间列
    MySQL性能分析及explain的使用
    VS 无法启动程序
    android 编写动画
    Advanced Installer
  • 原文地址:https://www.cnblogs.com/chillsrc/p/896638.html
Copyright © 2020-2023  润新知