Silverlight实例教程 - Navigation导航框架传递参数

上一篇学习了Silverlight Navigation导航框架URI映射机制,其中讨论到Silverlight Navigation导航框架传递参数的问题。说起导航框架页面间传递参数,是最常用开发技巧之一。本篇将详细讲解Silverlight Navigation导航传参方法。


传统Web应用中,由于普通Web页面属于无状态类型页面,所以各页面间传递参数经常使用Cookies,Session或者ViewState技术传递数据。另外,也会经常使用QueryString参数的方式,附加要传递的参数到当前URI链接,共享参数在服务器端和客户端之间。相比而言,Silverlight作为富客户端技术,其应用页面属于有状态类型页面,简单的理解,在Silverlight客户端定义的变量其内容都会被保存在客户端内存中,当前页面状态也将被保存。换句话说,Silverlight页面间传递参数可以定义全局应用级变量进行参数传递,但是这种方式会增加应用内存开支,降低应用运行效率,所以不推荐使用。而Silverlight应用另外一种传递参数的方法与传统Web应用传递参数方法类似,使用“QueryString参数”的方式实现页面间参数传递。

 

QueryString参数”方式传递参数基础格式

 
QueryString 参数”方式传递参数,在传统Web应用传参中经常用到,Silverlight仍旧使用传统格式进行URI参数传递操作,其格式如下:

 

/Views/Page.xaml?Parameter=Value

以上链接中,Page.xaml是一个Silverlight客户端应用页面,而需要传递的参数名称为“Parameter”,其参数值为“Value”。通过使用"?"连接页面名称和附带参数,目的页面通过指定API可以获取到附带的参数名称和参数值。

页面间,多参数传递格式如下:

 

/Views/Page.xaml?Parameter1=Value1&Parameter2=Value2

以上链接中使用"&"符号实现在URI中附加多参数,以达到多参数传递目的。

 

由上面可以看出,“ QueryString 参数”方式传递参数主要是通过URI,传递方法则与Silverlight导航框架URI地址映射有着密切的联系。
 

 

 

QueryString 参数”方式传递参数方法
在上一篇 URI映射机制中,我们曾经介绍过通过在App.xaml资源文件中设置MapperUri,从Home页面传递单一参数到About页面,其映射规则是:

 

< uriMapper:UriMapping Uri = " /About/{parameter} "  MappedUri = " /Views/About.xaml?parameter={parameter} " />


在源页面,通过NavigationService.Navigate方法对页面进行导航切换,其中附带需要传递的参数,

private   void  btSend_Click( object  sender, RoutedEventArgs e)
{
            
this .NavigationService.Navigate( new  Uri(String.Format( " /About/ "   +  txtQueryString.Text.Trim()), UriKind.Relative));
}

 

在Navigation导航框架运行时,在浏览器中URI地址格式为:
http://localhost:49750/SilverlightNavigationDemoTestPage.aspx #/About/SilverlightChina

通过URI地址映射解析,其实际地址将指向到"/Views/About.xaml?parameter=SilverlightChina",


 

 

 

根据以上介绍,如果需要传递多参数到目的页面,则需要添加新的地址映射规则,其中附带多个参数即可。例如添加规则:

< uriMapper:UriMapping  Uri ="/About/{name}&amp;{url}"  MappedUri ="/Views/About.xaml?name={name}&amp;url={url}" />

使用NavigationService.Navigate方法对页面进行导航切换,其中附带需要传递的多个参数:

private   void  btSendMultiple_Click( object  sender, RoutedEventArgs e)
{
            
this .NavigationService.Navigate( new  Uri(String.Format( " /About/ "   +  txtNameString.Text.Trim()  +   " & "   +  txtURLString.Text.Trim()), UriKind.Relative));
}

 

在映射规则中,使用{name}和{url} 作为URI通用符,两者使用"&amp"是“&”符号的HTML表示方法。

在Navigation导航框架运行时,在浏览器中URI地址格式为:

http://localhost:49750/SilverlightNavigationDemoTestPage.aspx #/About/%E9%93%B6%E5%85%89%E4%B8%AD%E5%9B%BD%E7%BD%91&SilverlightChina.Net
通过URI地址映射解析,其实际地址将指向到 "/Views/About.xaml?name= %E9%93%B6%E5%85%89%E4%B8%AD%E5%9B%BD%E7%BD%91 & url=SilverlightChina.Net"

 

 

读取“QueryString参数”方式传递参数值

Silverlight Navigation导航框架完成参数传递后,其目的页面,需要使用NavigationContext对象中的QueryString属性读取当前URI中包含的传递参数名称,以获取其参数值。其基本格式如下:

object parameter = this.NavigationContext.QueryString["parameter"];

以上面两个例程而言,其读取参数格式如下:

protected   override   void  OnNavigatedTo(NavigationEventArgs e)
{
            
if  ( this .NavigationContext.QueryString.ContainsKey( " parameter " ))
            {
                tbReceiveParameter.Text 
=   " 接收到的传递参数值:  "   +   this .NavigationContext.QueryString[ " parameter " ];
            }
            
else
            {
                tbReceiveParameter.Text 
=   " 接收参数1:  "   +   this .NavigationContext.QueryString[ " name " +   "    接收参数2:  "   +   this .NavigationContext.QueryString[ " url " ];
            }
}


在使用NavigationContext读取参数时,有以下两点需要注意:

 

  • 读取参数前需要检测参数名称是否存在,如果NavigationContext.QueryString中不存在需要获取的参数名称,则应用会出现异常;而参数值允许为空,如果参数值空,则返回Null到页面。常用检测代码如下:NavigationContext.QueryString.ContainsKey(paramName)
  • 参数赋值前需要进行参数类型转换,因为参数传递是以字符串形式传递,而页面赋值时则需要根据需求进行值类型转换,否则应用会出现异常;常用类型转换代码如下:int.TryParse(NavigationContext.QueryString[paramName], out paramValue)

 

最后,从MSDN转一个URI地址映射解析匹配对照表,其中包括URI附带参数实例:


 

 今天讲到这里,如果您有问题,欢迎留言讨论。

 源代码下载

 

 

Silverlight实例教程系列 - Silverlight Validation验证实例

Silverlight实例教程系列 - Silverlight Out-of-Browser实例

Silverlight实例教程系列 - Expression Blend实例中文教程

 

欢迎大家加入“专注Silverlight”QQ技术群,欢迎大家加入一起学习讨论Silverlight&WPF&Widnows Phone开发技术。 
22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
61267622(七群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人 
68435160(十一群 企业应用开发推荐群)超级群500人

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值