2009-11-24 79 views
0

我有一個Page.aspx。在完成寫入輸出後,我想將一個<腳本>標記注入到Page.aspx的響應流中。我怎麼能在頁面的代碼隱藏中做這種形式?ASP.NET:追加到HTTP響應

如果我這樣做:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.ClientScript.RegisterClientScriptInclude 
        ("dfasfds", this.Request.Path.Replace(".aspx", ".js")); 
    } 

然後腳本出現在HTML響應,但不是底。

如果我這樣做:

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.Response.Flush(); 
     this.Response.Write(.../*my javascript*/...); 
    } 

然後<腳本>標籤出現在文檔的最beginnning,在第一行。

+0

看看http://stackoverflow.com/questions/1726962/how-to-add-script-codes-before-the-body-tag-asp-net/1727004#1727004 – kristian

回答

0
string key = "MyScript"; 
string src = Request.Path.Replace(".aspx", ".js"); 
string script = "<script type=\"text/javascript\" src=\"" + src + "\"></script>"; 
ClientScript.RegisterStartupScript(GetType(), key, script); 
1

在Render階段之前,頁面內容不會寫入Response流。如果您在Page_Load()中調用Response.Flush(),則沒有什麼可以刷新。相反,你可以嘗試從Page_Unload()事件中調用Response.Write()。我很確定響應流在那時仍然活着。

但是,這樣做的結果是讓腳本在標籤後面出現。做一些事情比如使用母版頁,並在標記中包含腳本標記,或者可能使用用戶控件插入腳本標記更爲正確。

0

我還沒有嘗試過這個,但我猜測你正在.NET生命週期的錯誤階段執行寫入。 Page_Load發生在任何內容被渲染之前,所以你的Write()會在頁面頂部插入文本。我猜你想在PreRender中執行此操作:

「在渲染階段開始之前,使用[PreRender]對頁面或其控件的內容進行最終更改。」

https://msdn.microsoft.com/en-us/library/ms178472.aspx