前面在做項目的時候遇到這樣一個問題,在aspx頁面中需要嵌入一個Silverlight開發的插件,然后需要從aspx頁面上傳值到Silverlight上進行處理,百度、谷歌了良久,有一網友提供了一個我認為比較完美的解決辦法,現在就就把解決辦法寫出來,如果大家有更好的辦法,記得分享哦。
首先新建一個Silverlight項目,然后引用一個DLL(System.Web.Silverlight.dll 這個DLL是網上一位仁兄提供的,相當不錯),然后刪除本來的aspx頁面,添加一個新的頁面,然后在 頁面上添加一條語句:
<%@ Register Assembly="System.Web.Silverlight" Namespace="System.Web.UI.SilverlightControls"
TagPrefix="asp" %>
然后在下面寫入如下語句:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div id="divMap" style="width:100%;height:100%;">
<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/Standard.xap" Width="100%" Height="100%" />
</div>
下面對這個<asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/Standard.xap" Width="100%" Height="100%" />標簽進行簡要的說明:這個是那個引用的DLL中封裝好的,可以替代我們以前的那個aspx頁面的object,這個Source就是Silverlight項目生成的xap包。
下面進行傳值:
在aspx后台頁面的Page_Loade事件中寫入如下語句:
string str = Request.QueryString["Str"].ToString();
this.Xaml1.InitParameters = str;
這個Str的值是引用這個Silverlight項目的頁面傳值過來的。然后再App.xaml.cs中加入一個屬性,用來存儲傳過來的值:
public static string Points { get; set; }
然后在App.xaml.cs的Application_Startup事件中寫入:Points = e.InitParams["Points"].ToString();
然后在MainPage.xaml.cs中通過App.Points就可以取到這個值。
到此,頁面的傳值就完成了。
我項目中的本意是要在一個aspx頁面中引用一個Silverlight頁面,然后往這個Silverlight頁面傳一些坐標的值,然后在Silverlight中通過ArcGIS API For Silverlight來顯示這些坐標,開始的時候考慮過用Web服務來做,但是覺得過程太復雜了,用這個方法可以很方便的實現,不過這個方法有一個不好的地方是:每次傳值的時候都必須刷新這個Silverlight的頁面,會造成資源的浪費,尤其是我這個要用到地圖的項目中,是很耗費時間的。不知道大家有木有更好的辦法。需要那個DLL文件的童鞋可以留下郵箱地址,我會統一發給你們的。