ClientScriptManager與ScriptManager向客戶端註冊腳本的區別


剛剛看了Jeffrey Zhao老師的Ajax課程,寫了個筆記,留着以後查找方便,如有不對地方,還請指正。
-----------------------------------------------------------------------------------------

使用ClientScriptManager向客戶端註冊腳本
       ClientScriptManager在非異步(就是說非AJAX)環境下使用的。如果要在異步環境下注冊腳本應該使用ScriptManager的靜態方法來註冊(ScriptManager兼容異步於非異步環境下注冊腳本)。ClientScriptManager中註冊腳本的方法在ScriptManager中都有一一對應的方法,但是有一些區別,ScriptManager中的方法多了一個參數(多了第一個參數),而且使用ScriptManager來註冊腳本不是絕對能註冊成功的。

.aspx文件代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ClientScriptManager.aspx.cs" Inherits="Demo4_ClientScriptManager" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>ClientScriptManager</title>

</head>

<body>

    <form id="form1" runat="server">

         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

    </form>

</body>

</html>

 

.aspx.cs文件代碼
using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class Demo4_ClientScriptManager : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

     protected void Button1_Click(object sender, EventArgs e)

     {

         ClientScriptManager cs = this.ClientScript;

         cs.RegisterArrayDeclaration("Hello", "1, 2, 3");//#1

         cs.RegisterClientScriptBlock(this.GetType(), "HelloWorld", "function helloWorld(){alert(1);}", true);//#2

         cs.RegisterClientScriptInclude("HelloWorld", "HelloWorld.js");//#3

         cs.RegisterExpandoAttribute(this.Button1.ClientID, "Hello", "World");//#4

         cs.RegisterHiddenField("hello", "world");//#5

         cs.RegisterOnSubmitStatement(this.GetType(), "HelloWorld", "return window.confirm('Do you really want to submit the form?')");//#6

         cs.RegisterStartupScript(this.GetType(), "HelloWorld", "<script>alert('The page has loaded!')</script>");//#7

     }

}

生成頁面的HTML代碼
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

 

<head><title>ClientScriptManager</title></head>

 

<body>

<form    

"id="form1"

name="form1" 

method="post"

action="ClientScriptManager.aspx"

οnsubmit="javascript:return

WebForm_OnSubmit();>

 

<div>

<!--   #5   -->

<input type="hidden" name="hello" id="hello" value="world" />

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ2OTkzNDMyMWRkdcWxeVaF9qGYsIaDUa9Rcaihgnk=" />

</div>

 

<!--   #2   -->

<script type="text/javascript">

<!--

function helloWorld(){alert(1);}// -->

</script>

 

<!--   #3   -->

<script src="HelloWorld.js" type="text/javascript"></script>

 

<!--   #6   -->

<script type="text/javascript">

<!--

function WebForm_OnSubmit() {

return window.confirm('Do you really want to submit the form?');

return true;

}

// -->

</script>

 

<input type="submit" name="Button1" value="Button" id="Button1" />

 

<!--   #1   -->

<script type="text/javascript">

<!--

var Hello =  new Array(1, 2, 3);

// -->

</script>

 

<!--   #4   -->

<script type="text/javascript">

<!--

var Button1 = document.all ? document.all["Button1"] : document.getElementById("Button1");

Button1.Hello = "World";

// -->

</script>

 

<div>

       <input

type="hidden"

      name="__EVENTVALIDATION" id="__EVENTVALIDATION"

value="/wEWAgKet4KWBgKM54rGBikWLuZSHp4emnxNA3F0qTbFNfuo" />

</div>

<!--   #7   -->

<script>alert('The page has loaded!')</script>

</form>

</body>

</html>

 

使用ScriptManager向客戶端註冊腳本
       使用ScriptManager來向客戶端註冊腳本時,不一定每次都會成功生效,只有UpdatePanel更新了,纔會註冊成功。因爲註冊腳本的行爲是在UpdatePanel更新後執行的。

 

.aspx文件代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ScriptManagerReg.aspx.cs" Inherits="Demo5_ScriptManagerReg" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ScriptManagerReg</title>
</head>
<body>
    <form id="form1" runat="server">
         <asp:ScriptManager ID="ScriptManager1" runat="server">
         </asp:ScriptManager>

         <asp:UpdatePanel ID="UpdatePanel1" runat="server">
              <ContentTemplate>
                   <%= DateTime.Now %>
                   <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click1" />
              </ContentTemplate>
         </asp:UpdatePanel>

         <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
              <ContentTemplate>
                   <%= DateTime.Now %>
              </ContentTemplate>
         </asp:UpdatePanel>
    </form>
</body>
</html>

 

 

 

.aspx.cs文件代碼
using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

public partial class Demo5_ScriptManagerReg : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

    }

 

     protected void Button1_Click1(object sender, EventArgs e)

     {

        //#1

         ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "UpdatePanel1", "alert(1)", true);

        //#2

         ScriptManager.RegisterStartupScript(this.UpdatePanel2, this.GetType(), "UpdatePanel2", "alert(2)", true);

     }

}

說明
運行程序後,第一個時間會更新,更新後會alert(1);

因爲UpdatePanel2的UpdateMode="Conditional",不是每次都更新,所以不會有alert(2);

只要UpdatePanel2的UpdateMode="Always",則UpdatePanel2每次都更新,因爲能更新了,所以alert(2);就會註冊成功。

 

 

 

發佈了28 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章