首页 > 代码库 > 使用ClientScriptManager向客户端注册脚本

使用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="form1name="form1" method="postaction="ClientScriptManager.aspxonsubmit="javascript:return WebForm_OnSubmit();">

<div>
<!--   #5   -->
   <input type="hidden" name="hello" id="hello" value=http://www.mamicode.com/"world" />
   <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=http://www.mamicode.com/"/wEPDwUKMTQ2OTkzNDMyMWRkdcWxeVaF9qGYsIaDUa9Rcaihgnk=" />
</div>

<!--   #2   -->
<script type="text/javascript">
<!--
   function helloWorld(){alert(1);}// -->
</script>

<!--   #3   -->
<script src=http://www.mamicode.com/"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=http://www.mamicode.com/"Button" id="Button1" />

 

<!--   #1   -->

<script type="text/javascript">

<!--

var Hello =  new Array(123);

// -->

</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="__EVENTVALIDATIONvalue=http://www.mamicode.com/"/wEWAgKet4KWBgKM54rGBikWLuZSHp4emnxNA3F0qTbFNfuo" />
</div>

<!--   #7   -->

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

</form>

</body>

</html>

 

使用ScriptManager向客户端注册脚本

 使用ScriptManager来向客户端注册脚本时,不一定每次都会成功生效,只有UpdatePanel更新了,才会注册成功。因为注册脚本的行为是在UpdatePanel更新后执行的。

 pasting

.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);

因为UpdatePanel2UpdateMode="Conditional",不是每次都更新,所以不会有alert(2);

只要UpdatePanel2UpdateMode="Always",则UpdatePanel2每次都更新,因为能更新了,所以alert(2);就会注册成功。