中华网络安全联盟 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 进程知识 技术论坛
中华网络安全联盟 >> 程序开发 >> .Net >> flash菜单与asp.net进行交互
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
用在JavaScript的Requ
ASP.NET2.0中控件的简
asp.net客户端回调功能
ASP.Net用MD5和SHA1加
asp.net中生成缩略图并
ASP.NET 设计中的 N 个
asp.net读取数据库乱码
ASP.NET1.1中动态树的
flash菜单与asp.net进行交互
字体:

中华网络安全联盟    作者:奇趣    来源:奇趣技术网    时间:2008-5-28 14:55:09

最近想做一个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;
}
}
}

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

字体:
 
设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
Copyright©2006-2008 中华网络安全联盟 All rights reserved.