技巧:Silverlight应用程序中如何获取ASP.NET页面参数

概述

在开发Silverlight应用程序时,我们经常会遇到这样一种情况,需要在Silverlight应用程序的UserControl中获取ASP.NET页面参数,这个参数不一定来自于当前Silverlight应用程序的宿主页面,而有可能来自于其它的ASP.NET页面。

本文我们简单的介绍一下如何在Silverlight应用程序中获取ASP.NET页面参数。

需求

如下面的项目结构,我们会在Default.aspx页面中需要传递两个值到SilverlightTestPage.aspx页面,并且需要在SilverlightTestPage.aspx页面所宿主的Silverlight应用程序中获取并显示:

TerryLee_0103

其中Default.aspx页面看起来如下图所示:

TerryLee_0104

在单击“Submit”按钮时,转向SilverlightTestPage.aspx页面,并传递两个参数,如下代码所示:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Response.Redirect(String.Format("SilverlightTestPage.aspx?username={0}&email={1}",
        this.txtUserName.Text,
        this.txtEmail.Text));
}

使用InitParams

第一种方法,我们自然会使用InitParams属性,在Silverlight宿主页面加载时,我们在ASPX页面中获取参数,并作为初始化参数传递给Silverlight应用程序,如下代码所示:

protected void Page_Load(object sender, EventArgs e)
{
    this.Xaml1.InitParameters = String.Format("username={0},email={1}",
        Request.QueryString["username"],
        Request.QueryString["email"]);
}

然后在Silverlight应用程序的UserControl中设置两个属性,如下代码所示:

public String UserName
{
    set {
        this.lblUserName.Text = value;
    }
}

public String Email
{
    set {
        this.lblEmail.Text = value;
    }
}

这样就可以在Application_Startup事件中获取初始化参数,并传递给UserControl,如下代码所示:

private void Application_Startup(object sender, StartupEventArgs e)
{
    Page page = new Page();
    page.UserName = e.InitParams["username"];
    page.Email = e.InitParams["email"];
    this.RootVisual = page;
}

这样我们就通过InitParams来在Silverlight应用程序中获取到了ASP.NET页面的参数,运行后效果如下图所示:

TerryLee_0105

使用HtmlDocument

其实上面的方法获取ASP.NET页面中参数有些麻烦,我们可以直接使用HtmlDocument,在HtmlDocument中定义了QueryString属性,如下代码所示:

TerryLee_0106

这样我们可以在Silverlight直接使用HtmlDocument对象来获取当前Silverlight应用程序宿主页面中的参数,如下代码所示:

void Page_Loaded(object sender, RoutedEventArgs e)
{
    IDictionary<String, String> paras = HtmlPage.Document.QueryString;
    this.lblUserName.Text = paras["username"];
    this.lblEmail.Text = paras["email"];
}

运行后可以看到与上面的效果一致:

TerryLee_0105

总结

本文的内容非常简单,介绍了如何在Silverlight应用程序中获取ASP.NET页面参数,希望对大家有所帮助。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2008-07-09 23:49 TerryLee 阅读(3343) 评论(42)  编辑 收藏 所属分类: Silverlight

  回复  引用    
#1楼 2008-07-10 00:31 | 张同学 [未注册用户]
很有用的小技巧!
  回复  引用  查看    
#2楼 2008-07-10 01:21 | 真见      
强。
  回复  引用  查看    
#3楼 2008-07-10 04:12 | nasa      
:) 我也写过一个类似的
http://www.cnblogs.com/nasa/archive/2008/04/09/1143825.html
也来凑数吧. 呵呵
  回复  引用  查看    
#4楼 2008-07-10 07:56 | aspnetx      
很实用,支持下.
  回复  引用  查看    
#5楼 2008-07-10 08:33 | 王孟军!      
貌似不错哦
可惜一直没时间用WPFE
  回复  引用    
#6楼 2008-07-10 08:59 | aupo520 [未注册用户]
代码下载后编译

出错提示 HtmlObject 类找不到

楼主 HtmlDocument使用 能不能详细说下,这里有些不清楚
  回复  引用  查看    
#7楼 2008-07-10 09:37 | DaveLin      
很不错,一直关注
  回复  引用  查看    
#8楼 [楼主]2008-07-10 09:47 | TerryLee      
@张同学
呵呵,都是我在实际开发中遇到的问题,解决后分享出来:)
  回复  引用  查看    
#9楼 [楼主]2008-07-10 09:47 | TerryLee      
@真见
:)
  回复  引用  查看    
#10楼 [楼主]2008-07-10 09:47 | TerryLee      
@nasa
嗯,我看了你的文章

不过我始终认为修改构造函数不大好:)
  回复  引用  查看    
#11楼 [楼主]2008-07-10 09:47 | TerryLee      
@aspnetx
谢谢支持:)
  回复  引用  查看    
#12楼 [楼主]2008-07-10 09:48 | TerryLee      
@王孟军!
呵呵,一个简单的小技巧而已:)
  回复  引用  查看    
#13楼 [楼主]2008-07-10 09:49 | TerryLee      
@aupo520
为了减少压缩包体积,我删除了相关的dll

// HtmlDocument说白了就是JavaScript中document对象的封装,相关的用法可以查一下SDK
  回复  引用  查看    
#14楼 [楼主]2008-07-10 09:49 | TerryLee      
@DaveLin
谢谢:)
  回复  引用  查看    
#15楼 2008-07-10 10:04 | 探索之鸟      
没时间研究silverlight 先收藏lz 学习系列 。以后学习就靠它了
  回复  引用  查看    
#16楼 2008-07-10 10:56 | nasa      
@TerryLee
还是大哥的比较合理. 学习了
  回复  引用    
#17楼 2008-07-10 11:08 | Richard_Yan [未注册用户]
是否可以获取其他页面,例如HTML中JS传递的参数
  回复  引用    
#18楼 2008-07-10 18:43 | zhaoyang0618 [未注册用户]
请问楼主:
我在使用MediaElement(Silverlight2 Beta2)的时候发现一个诡异的问题, 播放暂停之后mediaelement.Play不起作用了,必须Stop才能起作用,而且播放结束的状态居然是Paused, 而不是Stopped. 不知是什么原因?大家是否遇到过.
  回复  引用  查看    
#19楼 [楼主]2008-07-10 19:21 | TerryLee      
@探索之鸟
:)
  回复  引用  查看    
#20楼 [楼主]2008-07-10 19:22 | TerryLee      
@nasa
呵呵,客气了:)
  回复  引用  查看    
#21楼 [楼主]2008-07-10 19:22 | TerryLee      
@Richard_Yan
这个没有问题,Silverlight对于与JavaScript交互提供了很好的支持,可以参考我前面写的几篇文章:)
  回复  引用  查看    
#22楼 [楼主]2008-07-10 19:23 | TerryLee      
@zhaoyang0618
我没注意这个问题,按理说MediaElement应该是比较稳定了。。。
  回复  引用    
#23楼 2008-07-11 09:20 | aupo520 [未注册用户]
代码下载后编译
出错提示 HtmlObject 类找不到
可是 sdk里没有HtmlObject 这个基类啊
可以提供完整代码么?
  回复  引用  查看    
#24楼 [楼主]2008-07-11 09:47 | TerryLee      
@aupo520
你给我发邮件,我发源码给你:)
  回复  引用    
#25楼 2008-07-11 09:50 | aupo520 [未注册用户]
麻烦您 发代码给我 谢谢
  回复  引用    
#26楼 2008-07-11 09:54 | zhaoyang0618 [未注册用户]
关于MediaElement, 前一个问题是我的代码不严谨造成的,可是播放停止那里,不知道怎么回事,结束的时候,状态为Paused, 而且时间点Position停止在最后了, 这是造成Play无法顺利进行的原因所在. 播放完毕为什么不恢复到0位置呢?
  回复  引用  查看    
#27楼 [楼主]2008-07-11 10:01 | TerryLee      
@aupo520
你的邮件地址呢??
  回复  引用  查看    
#28楼 [楼主]2008-07-11 10:02 | TerryLee      
@zhaoyang0618
我明白你说的问题,找时间我先测试一下,然后给你发邮件:)
  回复  引用    
#29楼 2008-07-11 10:04 | zhaoyang0618 [未注册用户]
@TerryLee
多谢!
  回复  引用    
#30楼 2008-07-11 11:10 | aupo520 [未注册用户]
@TerryLee
帮忙发下 完整的代码.谢谢
  回复  引用    
#31楼 2008-07-11 11:12 | aupo520 [未注册用户]
@TerryLee
我在上面填了哦 (只有博主才能看到)那里
sonpater@hotmail.com

麻烦您了.
  回复  引用  查看    
#32楼 [楼主]2008-07-11 13:01 | TerryLee      
@aupo520
好的,我晚上回家给你发
  回复  引用    
#33楼 2008-07-13 08:59 | aupo520 [未注册用户]
楼主完整代码请邮件我,谢谢
sonpater@hotmail.com
  回复  引用  查看    
#34楼 [楼主]2008-07-13 23:55 | TerryLee      
@aupo520
已经更新了源代码,现在可以下载了。
  回复  引用    
#35楼 2008-07-14 08:48 | aupo520 [未注册用户]
最新的代码中

在HtmlDocument中定义QueryString属性 那个代码在什么地方?
  回复  引用  查看    
#36楼 [楼主]2008-07-14 17:39 | TerryLee      
@aupo520
QueryString是Silverlight 2内置的HtmlDocument对象的一个属性,不用自己定义。
  回复  引用    
#37楼 2008-07-15 14:08 | zhaoyang0618 [未注册用户]
Silverlight的HyperlinkButton的_blank方式的页面居然会被阻止的?晕
  回复  引用  查看    
#38楼 2008-07-15 21:49 | 孙长宇      
楼主分享的两种方法都有一个缺点——需要一、URL跳转才能通过QueryString传值,也就是说,页面要刷新,这样一来“用户体验”就下降了。
现在Silverlight给人的感觉向一个半成品,好多应该有的东西都没有。无刷新传参数的方法我也想过,不过现在好像真的做不出来。
  回复  引用  查看    
#39楼 [楼主]2008-07-21 10:18 | TerryLee      
@zhaoyang0618
有可能
  回复  引用  查看    
#40楼 [楼主]2008-07-21 10:20 | TerryLee      
@孙长宇
看来你没看明白我的文章,页面跳不跳转在这里并不重要,我需要的是ASP.NET页面中的参数到Silverlight。

另外,我想知道你所说的半成品,还缺少哪些东西?能不能提出来,我会反馈给微软Silverlight团队。
  回复  引用    
#41楼 2008-07-25 23:24 | Kennytian [未注册用户]
重定向到aspx页面没有问题,重定向到xxxTestPage.html?username=Kenny就会报错。
可以重定向到html页面吗? 如果能,我应该怎么做? 麻烦TerryLee大哥指点一下。
  回复  引用  查看    
#42楼 [楼主]2008-07-27 21:32 | TerryLee      
@Kennytian
重定向到HTML页面,就只能使用InitParameters这种方式了。。。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-13 23:55 编辑过