ScriptManager.RegisterStartupScript方法
如果頁面中不用Ajax,cs中運行某段js代碼方式可以是: Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window.open('default2.aspx')</script>");
如果頁面中使用了Ajax ,則上述代碼即使執行也無效果。
對這種情況我們通常采用: ScriptManager.RegisterStartupScript(this.Button1, this.GetType(), "alertScript", "window.open('default2.aspx');", true);
其中第一個參數為要注冊腳本的控件ID,試了一下,只要是本頁面的就行。
第二個參數為注冊腳本控件類型,是控件還是this的GetType()都可以,typeOf(string)也沒問題.
第三個腳本函數的名字,隨便起。
第四個是腳本內容。
第五個是標明是否再添加腳本標簽,如果第四個參數里包含了<script></script>標簽,此處則為false,否則為true。
注意:aspx代碼是這樣的
我在Button1_Click的事件里注冊腳本,一定要加紅色的部分,否則總是提示不能parse什么東西!
另外,js無法干涉cs代碼。所以一旦腳本注冊成功,js和cs代碼會互不相干的各自運行。
以上的內容來自別人的文章,現在說一下自己的使用體會:
在按鈕Button1的onClick事件中注冊腳本可以這樣寫:ScriptManager.RegisterStartupScript(this.UpdatePanel1, Page.GetType(), System.DateTime.Now.Ticks.ToString(), "window.open('default2.aspx');", true);
頁面中的紅色部分也可以去掉了。
現在對第三個參數“腳本函數的名稱”要特別說明一下,
如果在onClick事件中,使用該方法注冊了兩個腳本。如果注冊的兩個腳本函數的名稱相同,則第二個腳本函數就不會執行。
因為腳本管理器使用此字符串來分析是否是一個已經加載過的腳本,如果加載過,將不會再次渲染。所以第二個就不會加載執行了。
Page.ClientScript.RegisterStartupScript() 方法
使用類型、鍵、腳本文本和指示是否添加腳本標記的布爾值向 Page 對象注冊啟動腳本。
參數
- type
-
要注冊的啟動腳本的類型。
- key
-
要注冊的啟動腳本的鍵。
- script
-
要注冊的啟動腳本文本。
- addScriptTags
-
指示是否添加腳本標記的布爾值.
-
備注:
-
啟動腳本由它的鍵和類型唯一標識。具有相同的鍵和類型的腳本被視為重復腳本。只有使用給定的類型和鍵對的腳本才能使用該頁面進行注冊。試圖注冊一個已經注冊的腳本不會創建重復的腳本。
調用 IsStartupScriptRegistered 方法以確定具有給定的鍵和類型對的啟動腳本是否已經注冊,從而避免不必要的添加腳本嘗試。
在 RegisterStartupScript 方法的此重載中,使用 addScriptTags 參數可指示 script 參數中提供的腳本是否包裝在 <script> 元素塊中。將 addScriptTags 設置為 true 指示腳本標記將自動添加。
RegisterStartupScript 方法添加的腳本塊在頁面加載完成但頁面的 OnLoad 事件引發之前執行。
-
示例
-
<%@ Page Language="C#"%> <script runat="server"> public void Page_Load(Object sender, EventArgs e) { // Define the name and type of the client scripts on the page. String csname1 = "PopupScript"; String csname2 = "ButtonClickScript"; Type cstype = this.GetType(); // Get a ClientScriptManager reference from the Page class. ClientScriptManager cs = Page.ClientScript; // Check to see if the startup script is already registered. if (!cs.IsStartupScriptRegistered(cstype, csname1)) { String cstext1 = "alert('Hello World');"; cs.RegisterStartupScript(cstype, csname1, cstext1, true); } // Check to see if the client script is already registered. if (!cs.IsClientScriptBlockRegistered(cstype, csname2)) { StringBuilder cstext2 = new StringBuilder(); cstext2.Append("<script type=text/javascript> function DoClick() {"); cstext2.Append("Form1.Message.value='Text from client script.'} </"); cstext2.Append("script>"); cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false); } } </script> <html> <head> <title>ClientScriptManager Example</title> </head> <body> <form id="Form1" runat="server"> <input type="text" id="Message"> <input type="button" value="ClickMe" onclick="DoClick()"> </form> </body> </html>

