当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > flash菜单与asp.net进行交互

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 flash菜单与asp.net进行交互


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 111 ::
收藏到网摘: n/a

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

一、动态加载菜单
菜单的内容如下(menu.xml):


如果动态加载呢?

1)把以menu.xml文件放到网站的根目录之下,然后在flash的as中写如下的as脚本.


这样就可以把菜单加载到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;
}
}
}

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