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

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-23   浏览: 122 ::
收藏到网摘: 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;
}
}
}

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