(轉)ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法


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代碼是這樣的

復制代碼
< div >   
   < asp:UpdatePanel  ID ="UpdatePanel1"  runat ="server" >      
    < ContentTemplate >           
   < asp:TextBox  runat ="server"  ID ="TextBox2"   >          
    </ asp:TextBox >          
    < asp:Button  runat ="server"  Text ="Button"  ID ="Button1" onClick ="Button1_Click"   />      
    </ ContentTemplate >    
      < Triggers >         
     < asp:PostBackTrigger  ControlID ="Button1"   />    
      </ Triggers >   
    </ asp:UpdatePanel >
</ div >
復制代碼

 

我在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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM