你的位置:3P代码 >> ASP技术 >> ASP基础 >> 详细内容 在线投稿

flash菜单与asp.net进行交互

热度0票  浏览140次 时间:2010年12月29日 11:58

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

一、动态加载菜单

菜单的内容如下(menu.xml):

如果动态加载呢?

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);

}

//与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;

}

}

}

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

TAG: ASP asp Asp ASp flash Flash FLASH 菜单 交互
上一篇 下一篇