1. 程式人生 > >C#後臺新增js指令碼

C#後臺新增js指令碼

一、使用Response.Write
1.方法:
Response.Write("<script languge='javascript'>alert('成功改動');</script>");
2.常見問題:
(1)問題:Response.Write 後連線Response.Redirect ,則Response.Write無法顯示,直接跳轉入Response.Redirect 的頁面。
解決方法:跳轉頁面寫在js中,如
Response.Write("<script languge='javascript'>alert('成功改動');window.location.href='index.aspx'</script>");
(2)問題:假設在Ajax的UpdatePanel中的button中用Response.Redirect()或Response.Write()進行URL帶引數的頁面重定向時出現錯誤。
因為Ajax是無重新整理的,而使用Response進行帶參重定向時須要重新整理頁面。
解決方法:在UpdatePanel下設定“asp: PostBackTrigger”的“ControlID”為指定的控制元件名稱即可,如:
<Triggers>
<asp:PostBackTrigger ControlID="GridView" />
</Triggers>
能夠用註冊client事件的方法解決UpdatePanel中的重定向問題
跳轉到某一指定頁面Response.Redirect("xxx.aspx?yy="+Ftype+"");  
Response.Write("<script languge='javascript'>window.parent.popupContent.Hide();</script>");
Response.Write("<script languge='javascript'>window.parent.grdCarToOther.PerformCallback(" + iCrdID + ");</script>");

二、使用RegisterClientScriptBlock
1.方法
public void RegisterClientScriptBlock(Type type, string key, string script)
public void RegisterClientScriptBlock(Type type, string key, string script, bool addScriptTags)
eg:ClientScript.RegisterClientScriptBlock(this.GetType(), "script1", "alert(1);", true);
2.引數介紹: 
(1)type 要註冊的啟動指令碼的型別。
(2)key 要註冊的啟動指令碼的鍵,也就是你自己給這段指令碼起的名字。相同 key 的指令碼被當作是重複的,對於這樣的指令碼只輸出最先註冊的,
(3)ClientScriptBlock 和 StartupScript 中的 key 相同不算是重複的。script 指令碼程式碼。
(4)addScriptTags 是否新增 <script> 標籤,如果指令碼程式碼中不含 <script> 標籤,則應該指定該值為 true,若不指定該值,會被當作 false 對待。
RegisterClientScriptBlock 與 RegisterStartupScript 的區別:
ClientScript.RegisterClientScriptBlock(this.GetType(), "script1", "alert(1);", true);
ClientScript.RegisterStartupScript(this.GetType(), "script1", "alert(2);", true);

三、使用RegisterStartupScript
1.方法:
public void RegisterStartupScript(Type type, string key, string script)
public void RegisterStartupScript(Type type, string key, string script, bool addScriptTags)
eg:ClientScript.RegisterStartupScript(this.GetType(), "script2", "alert(4);", true);
2.引數介紹:
同RegisterClientScriptBlock的引數介紹。

四、三者區別:
1.Response.Write可以輸出JavaScript,但輸出的內容是在 <html> 之前,這會導致一些問題,比如樣式表失效,甚至會導致一些脆弱的瀏覽器發生錯誤。
2.ClientScript則可以方便地管理 JavaScript,應該說 ClientScript.RegisterClientScriptBlock 與 ClientScript.RegisterStartupScript只有一點區別,那就是RegisterClientScriptBlock將指令碼程式碼寫在 <form> 之後,而 RegisterStartupScript 將程式碼寫在 </form>(注意是結束標籤)之前。