Silverlight实用窍门系列:37 程兴亮,网名煦风满裳
在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString。首先我们新建一个名为SLConnectASP.NET的Silverlight应用程序,然后在SLConnectASP.NET.web项目中添加一个Index.aspx的页面。
一、Silverlight和ASPX页面的QueryString传参
实现思路:在Silverlight端跳转到页面到Index.aspx并且传递一个QueryString参数ID,在该Index.aspx页面显示出ID。在Index.aspx页面有一个按钮可以向Silverlight所在页面传递一个参数aspxid,在Silverlight端读取aspxid参数并且显示出来。
首先我们看Silverlight后台代码:
#regionQueryString传值//QueryString步骤一privatevoidbutton2_Click(objectsender, RoutedEventArgs e){//传递参数给Asp.net页面HtmlPage.Window.Eval("location='"+Application.Current.Host.Source.AbsoluteUri.Replace( Application.Current.Host.Source.AbsolutePath,"")+"/index.aspx?id=203';");}//QueryString步骤四privatevoidShowQueryString(){//接收到ASP.NET页面传送过来的QueryString值IDictionaryparas=HtmlPage.Document.QueryString;if(paras.ContainsKey("aspxid")) {this.label1.Content="获取到ASP.NET传值:"+paras["aspxid"]; }}#endregion
然后我们来看Index.aspx.cs的代码如下:
#regionASP.NET端操作Silverlight传输过来的QueryString值//QueryString步骤二privatevoidBindQueryString(){//ASP.NET端获取到Silverlight传输过来的QueryString值if(Request.QueryString.Count>0) {this.Label1.Text="获取到的Silverlight客户端QueryString值是:"+Request.QueryString["id"].ToString(); }}//QueryString步骤三protectedvoidButton1_Click(objectsender, EventArgs e){//回传QueryString值给Silverlight客户端Response.Redirect("./SLConnectASP.NETTestPage.aspx?aspxid=109");}#endregion
二、Silverlight和ASPX页面的Cookie传参
实现思路:在Silverlight端创建一个Key名为FirCookieKey,Value值为FirCookieValue的Cookie,然后跳转页面到Index.aspx页面,在该页面显示出来。在该页面有一个按钮可以修改这个Cookie,并且跳转回Silverlight端,在Silverlight端读取这个已经被修改过的Cookie并且显示出来。
首先我们看Silverlight端的后台代码MainPage.xaml.cs:包括步骤一创建Cookie、步骤四读取被修改过的Cookie
#regionCookie传值//Cookie步骤一privatevoidbutton1_Click(objectsender, RoutedEventArgs e){//编写一个键为FirCookieKey,值为FirCookieValue的CookiestringoldCookie=HtmlPage.Document.GetProperty("cookie")asString; DateTime expiration=DateTime.UtcNow+TimeSpan.FromDays(2000);stringcookie=String.Format("{0}={1};expires={2}","FirCookieKey","FirCookieValue", expiration.ToString("R")); HtmlPage.Document.SetProperty("cookie", cookie);//跳转界面HtmlPage.Window.Eval("location='"+Application.Current.Host.Source.AbsoluteUri.Replace( Application.Current.Host.Source.AbsolutePath,"")+"/index.aspx';");}//Cookie步骤四privatevoidShowCookie(){//显示当前键为FirCookieKey的Cookie值String[] cookies=HtmlPage.Document.Cookies.Split(';');foreach(String cookie1incookies) { String[] keyValues=cookie1.Split('=');if(keyValues[0]=="FirCookieKey") {this.textBox2.Content="Cookie的Key值是:"+keyValues[0];this.textBox1.Content="Cookie的Value值是:"+keyValues[1]; } };}#endregion
接着我们来看Index.aspx.cs,包括Cookie操作二和Cookie操作三
#regionASP.NET端获取到操作Cookie值//Cookie操作二privatevoidBindCookie(){//ASP.NET端获取到Silverlight传输过来的Cookie值HttpCookie cookie=Request.Cookies["FirCookieKey"];if(cookie.Value!=null) {this.Label2.Text="获取到的Silverlight客户端Cookie值:"+cookie.Value; }}//Cookie操作三protectedvoidButton2_Click(objectsender, EventArgs e){//回传重新设置Cookie值然后传输给SilverlightHttpCookie cookie=Request.Cookies["FirCookieKey"]; cookie.Value="NewCookieValue"; HttpContext.Current.Response.Cookies.Add(cookie); Response.Redirect("./SLConnectASP.NETTestPage.aspx");}#endregion
最后这两个实例的MainPage.xaml的代码如下:
Index.aspx的代码如下:
本实例采用VS2010+Silverlight 4.0编写。如需源码请点击 SLConnectASP.NET.rar 下载。本实例效果图如下: