aspx向silverlight传值

时间:2023-03-10 08:44:48
aspx向silverlight传值

原文:http://www.cnblogs.com/lensso/archive/2010/07/27/1785844.html

方法1:

向嵌入aspx页面的silverlight对象添加imnitParams参数,它的value是与querystring类似的键值对,多个参数用逗号隔开,aspx后台代码如下所示:


<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" 

width="100%" height="100%">

<param name="source" value="ClientBin/Para_from_aspx2sl.xap"/>

<param name="onError" value="onSilverlightError"/>

<param name="background" value="white"/>

<param name="minRuntimeVersion" value="3.0.40624.0"/>

<param name="autoUpgrade" value="true"/>

<param name="initParams" value="id=114,name=lensso"/>

<!--或以如下形式给value赋值-->

<!--<param name="initParames" value="id=<%# Request.Querystring["id"]%>"/>-->

</object>

至此完成了aspx页面的赋值工作,在silverlight中的Application_Startup事件处理函数中可以利用事件变量来取得该值,(App.Xaml.cs)代码如下:


privatevoid Application_Startup(object sender, StartupEventArgs e)

{

this.RootVisual =new MainPage();

MessageBox.Show(e.InitParams["id"]+e.InitParams["name"]);

}

方法2:

1.下载System.Web.Silverlight.dll(可以去网上搜一下)

2.将下载的dll引用进web工程

3.在aspx页面添加注册代码,如下:

<%@ Register Assembly="System.Web.Silverlight" 

Namespace="System.Web.UI.SilverlightControls" TagPrefix="sl"%> 

4.添加silverlight控件,代码如下:

<sl:Silverlight id="slobj" runat="server" source="~/ClientBin/Para_from_aspx2sl.xap" version="2.0" width="100%" height="100%"></sl:Silverlight>

5.添加scriptmanager,代码如下

<asp:scriptmanager ID="Scriptmanager1" runat="server"></asp:scriptmanager>

6.aspx后台代码传值,代码如下:

slobj.InitParameters ="id=123,name=hello";

7.silverlight中取得aspx传过来的值,代码如方法1中。

<注>如果你想把配置放在web.config中,在aspx的后台添加配置,而不想使用sl控件,可以使用aspx的literal控件,如下方法:

web.config配置

 <appSettings>
<add key="AuthenticationAddress" value="http://192.168.104.133:13999/SysAdmin/Runtime/AuthenticationService.svc"/>
</appSettings>

aspx中的写法如下


 <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
width="100%" height="100%">
<param name="source" value="ClientBin/OIU.xap"/>
<param name="onError" value="onSilverlightError"/>
<param name="background" value="white"/>
<param name="minRuntimeVersion" value="3.0.40818.0"/>
<param name="autoUpgrade" value="true"/>
<asp:Literal ID="slInitParams" runat="server"></asp:Literal>
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration: none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight"
style="border-style: none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style="visibility: hidden; height: 0px; width: 0px;
border: 0px"></iframe>

注意第8行添加的控件

aspx后台这么写

 StringBuilder sb =new StringBuilder();
sb.Append(" <param name=\"InitParams\" value=\"");
sb.Append(string.Format("AuthenticationAddress={0}", ConfigurationManager.AppSettings["AuthenticationAddress"]));
sb.Append( "\"></param>");
slInitParams.Text =sb.ToString();

最好是将向SL传值的代码写在前台,这样的话就可以把Sl嵌入到其它已经发布了的项目中,而不用重新编译,具体代码可以如下:

aspx向silverlight传值
 <Page Language="C#"/>//纯前台页面,不添加页面后台文件

 <Script runat="server">
//将页面的Page_Load事件写在前台,这样的话就SL就是一个纯前台的模块了
Protected Page_Load(object sender,EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append(" <param name=\"InitParams\" value=\"");
sb.Append(string.Format("AuthenticationAddress={0}", ConfigurationManager.AppSettings["AuthenticationAddress"]));
sb.Append( "\"></param>");
slInitParams.Text =sb.ToString();
}
</Script>
aspx向silverlight传值

同样可以实现动态配置silverlight的服务,需要注意的是,因为SL是作为客户端插件运行的,它永远是运行在客户端,不像aspx是向服务端发送请求,所以如果服务是映射到外网了的话,配置的服务地址一定要是服务的外网地址