2010-03-11 26 views
1

在Page_Load事件的我的頁面上,我將一組字符串添加到Context對象。我有一個HttpModule將啓動EndRequest並檢索字符串的集合。然後我做的是寫出一個腳本引用標記(基於字符串集合)給響應。問題是頁面讀取腳本引用,但不檢索文件的內容(我想象,因爲這發生在EndRequest事件中)。我無法觸發BeginRequest事件,因爲我無法訪問Context Items集合。HttpModule將JavaScript腳本引用寫入響應

我試着還註冊了一個處理腳本引用請求的HttpHandler,但是我無法從那裏訪問Context.Items中的字符串集合。有什麼建議麼?

的Page_Load:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Context.Items.Add("ScriptFile", "/UserControls.js"); 
    } 

的HttpModule:

public void OnEndRequest(Object s, EventArgs e) 
    { 
     HttpApplication app = s as HttpApplication; 
     object script = app.Context.Items["ScriptFile"]; 
     app.Response.Write("<script type='text/javascript' src='" + script + "'></script>"); 
    } 

回答

0

首先,我敢肯定這是不是把標籤有效的地方。

二,你爲什麼要重新發明輪子?您已經擁有ScriptManager以及將腳本代碼注入ASP.NET輸出的完善方法。爲什麼在EndRequest期間需要這樣做?這應該可以在頁面級別進行處理。

+0

當然,除非他是製作第三方模塊,當其他人使用時需要自動注入此代碼,因此他們不必手動執行此操作。 – 2016-04-27 16:48:02

0

如果每個參考指向一個特定的腳本,我會使用每個頁面的Page_Load中的ClientScriptManager

if(!ClientScript.IsClientScriptIncludeRegistered("ScriptFile")) 
{ 
    ClientScript.RegisterClientScriptInclude("ScriptFile", "/UserControls.js"); 
} 

如果你需要計算腳本基於多個鍵或在每一頁沒有已知的一些其他因素聯繫起來的,然後在this question檢查出答案#2。