Silverlight实用窍门系列:37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)【附带实例源码】

简介:

 在本节中将讲述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后台代码:

复制代码
 
 
#region QueryString传值
// QueryString步骤一
private void button2_Click( object sender, RoutedEventArgs e)
{
// 传递参数给Asp.net页面
HtmlPage.Window.Eval( " location=' " +
Application.Current.Host.Source.AbsoluteUri.Replace(
Application.Current.Host.Source.AbsolutePath,
"" ) + " /index.aspx?id=203'; " );
}
// QueryString步骤四
private void ShowQueryString()
{
// 接收到ASP.NET页面传送过来的QueryString值
IDictionary < String, String > paras = HtmlPage.Document.QueryString;
if (paras.ContainsKey( " aspxid " ))
{
this .label1.Content = " 获取到ASP.NET传值: " + paras[ " aspxid " ];
}
}
#endregion
复制代码

        然后我们来看Index.aspx.cs的代码如下:

复制代码
 
 
#region ASP.NET端操作Silverlight传输过来的QueryString值
// QueryString步骤二
private void BindQueryString()
{
// ASP.NET端获取到Silverlight传输过来的QueryString值
if (Request.QueryString.Count > 0 )
{
this .Label1.Text = " 获取到的Silverlight客户端QueryString值是: "
+ Request.QueryString[ " id " ].ToString();
}
}
// QueryString步骤三
protected void Button1_Click( object sender, 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

复制代码
 
 
#region Cookie传值
// Cookie步骤一
private void button1_Click( object sender, RoutedEventArgs e)
{

// 编写一个键为FirCookieKey,值为FirCookieValue的Cookie
string oldCookie = HtmlPage.Document.GetProperty( " cookie " ) as String;
DateTime expiration
= DateTime.UtcNow + TimeSpan.FromDays( 2000 );
string cookie = 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步骤四
private void ShowCookie()
{
// 显示当前键为FirCookieKey的Cookie值
String[] cookies = HtmlPage.Document.Cookies.Split( ' ; ' );
foreach (String cookie1 in cookies)
{
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操作三

复制代码
 
 
#region ASP.NET端获取到操作Cookie值
// Cookie操作二
private void BindCookie()
{
// ASP.NET端获取到Silverlight传输过来的Cookie值
HttpCookie cookie = Request.Cookies[ " FirCookieKey " ];
if (cookie.Value != null )
{
this .Label2.Text = " 获取到的Silverlight客户端Cookie值: " + cookie.Value;
}

}
// Cookie操作三
protected void Button2_Click( object sender, EventArgs e)
{
// 回传重新设置Cookie值然后传输给Silverlight
HttpCookie cookie = Request.Cookies[ " FirCookieKey " ];
cookie.Value
= " NewCookieValue " ;
HttpContext.Current.Response.Cookies.Add(cookie);
Response.Redirect(
" ./SLConnectASP.NETTestPage.aspx " );
}
#endregion
复制代码

        最后这两个实例的MainPage.xaml的代码如下:

复制代码
 
 
< Grid x:Name = " LayoutRoot " Background = " White " >
< sdk:Label Height = " 27 " HorizontalAlignment = " Left " Margin = " 41,25,0,0 "
Name
= " label1 " VerticalAlignment = " Top " Width = " 284 " />
< Button Content = " 传送浏览器参数 " Height = " 38 " HorizontalAlignment = " Left "
Margin
= " 41,63,0,0 " Name = " button2 " VerticalAlignment = " Top "
Width
= " 113 " Click = " button2_Click " />

< sdk:Label Height = " 27 " HorizontalAlignment = " Left " Margin = " 41,116,0,0 "
Name
= " textBox2 " VerticalAlignment = " Top " Width = " 284 " />
< sdk:Label Height = " 27 " HorizontalAlignment = " Left " Margin = " 41,149,0,0 "
Name
= " textBox1 " VerticalAlignment = " Top " Width = " 284 " />
< Button Content = " 设置Cookie值 " Height = " 38 " HorizontalAlignment = " Left "
Margin
= " 41,194,0,0 " Name = " button1 " VerticalAlignment = " Top "
Width
= " 113 " Click = " button1_Click " />
</ Grid >
复制代码

        Index.aspx的代码如下:

复制代码
 
 
< div >

< asp:Label ID = " Label1 " runat = " server " Text = " Label " ></ asp:Label >
< br />
< br />
< asp:Button ID = " Button1 " runat = " server " Text = " 回传值给Silverlight应用程序QueryString "
onclick
= " Button1_Click " />

< br />
< br />

< asp:Label ID = " Label2 " runat = " server " Text = " Label " ></ asp:Label >
< br />
< asp:Button ID = " Button2 " runat = " server "
Text
= " 回传值给Silverlight应用程序Cookie " onclick = " Button2_Click "
/>

< br />

</ div >
复制代码

        本实例采用VS2010+Silverlight 4.0编写。如需源码请点击 SLConnectASP.NET.rar 下载。本实例效果图如下:

2011041317211622.jpg2011041317212319.jpg



本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/04/14/2015085.html,如需转载请自行联系原作者


相关文章
|
1月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
50 0
.net写入Cookie访问计数器
.net写入Cookie访问计数器
33 0
|
Web App开发 开发框架 安全
[ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问
看了前文的同学们应该都知道,搜狗、360等浏览器在单点登录中反复重定向,最终失败报错。 原因在于,非Chrome80+浏览器不识别Cookie上的SameSite=none属性值,导致认证Cookie在后续请求中被抛弃。
[ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问
|
XML 开发框架 负载均衡
抽丝剥茧:浅议ASP.NET Cookie的生成原理
  前言   可能有人知道 Cookie的生成由 machineKey有关, machineKey用于决定 Cookie生成的算法和密钥,并如果使用多台服务器做负载均衡时,必须指定一致的 machineKey用于解密,那么这个过程到底是怎样的呢?   如果需要在 .NETCore中使用 ASP.NETCookie,本文将提到的内容也将是一些必经之路。   抽丝剥茧,一步一步分析   首先用户通过 AccountController->Login进行登录:   //   // POST: /Account/Login   public async Task Login(LoginV
205 0
|
1月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
91 0
|
1月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
33 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
147 5
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
39 0
|
10月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
134 0
|
11月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
72 0