2011-03-01 33 views
0

我想在每個頁面上注入一些javascript;基本上,這是一個JSON字符串。在主頁面中注入json數據

在我的母版頁,我有這樣的:

public partial class TheMasterPage : System.Web.UI.MasterPage 
{ 
    protected void Page_Init(object sender, EventArgs e) 
    { 
    if (Session["TheData"] == null) 
      {Session["TheData"] = GetData(DateTime.Today.Date;); } 
    } 
} 

這種檢查是否會話中包含我需要的JSON序列化的數據。

我想要做的是將會話中的數據包含在每個頁面的JavaScript中。

在頁面的ASPX,我有:

<asp:ContentPlaceHolder id="head" runat="server"> 
    <script type="text/javascript"> 
     var TheJsonData =... ; 
    </script> 
</asp:ContentPlaceHolder> 

如何在那裏注入JSON數據?如果我這樣做,哪一個先執行? aspx注入或Page_Init函數?

我用下面的代碼序列化:

TheDataList = (List<MyModel>)Session["TheData"]; 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
serializer.RegisterConverters(new JavaScriptConverter[] { new MyModel() }); 
String result = serializer.Serialize(TheDatatList); 

我希望能夠做的是$(文件)。就緒(函數(){ShowData(TheJsonData)});當文檔就緒事件觸發時已經加載了變量TheJsonData。

謝謝。

回答

2

嘗試這樣的:

<script type="text/javascript"> 
    var TheJsonData = <%= new JavaScriptSerializer().Serialize(Session["TheData"]) %>; 
</script> 

而最終的結果應該是這個樣子:

<script type="text/javascript"> 
    var TheJsonData = [{ prop1: 'value1', prop2: 'value2' }, { prop1: 'value3', prop2: 'value4' }]; 
</script> 

Page_Init將在視圖中的代碼之前運行,並會設置在會話中的值。

+0

這是說無法找到命名空間的JavascriptSerializer。在母版頁後面的代碼中,我使用了System.Web.Script.Serialization;我在哪裏可以使用aspx頁面? – frenchie 2011-03-01 21:08:27

+0

最上面:'<%@ Import Namespace =「System.Web.Script.Serialization」%>'。或者直接輸入:'<%= new System.Web.Script.Serialization.JavaScriptSerializer()...'。另外不要忘記在你的項目中引用'System.Web.Extensions'程序集,這是聲明這個類的地方。 – 2011-03-01 21:09:12

+0

好的,太棒了!我從contentplaceholder中刪除了javascript,它工作。謝謝! – frenchie 2011-03-01 21:13:37