您的位置:首页 > 其它

服务端管理客户端脚本-Page.ClientScript

2009-09-27 15:25 323 查看
Page.ClientScript-获取用于管理脚本、注册脚本和向页添加脚本的 ClientScriptManager 对象。

讨论下ClientScriptManager 类:在 Web 应用程序中定义用于管理客户端脚本的方法。

通过在网页的 HTML 标记中包含脚本,可以声明方式向网页添加客户端脚本。然而,有些情况下需要动态添加客户端脚本。若要动态添加脚本,根据您想添加脚本的时间及方式,使用 RegisterClientScriptBlock 方法、RegisterClientScriptInclude 方法、RegisterStartupScript 方法或 RegisterOnSubmitStatement 方法。

。向 ASP.NET 网页动态添加客户端脚本。

使用服务器代码可以向页中添加客户端脚本。当客户端脚本的内容依赖于直到运行时才可用的信息时,使用服务器代码创建客户端脚本很有用。当您希望客户端脚本在下列情况下执行时,向页动态添加客户端脚本也很有用:

当页已完成加载时

当用户提交页时

方法 说明
RegisterClientScriptBlock

向页的顶部添加一个脚本块。以字符串形式创建脚本,然后将其传递给方法,方法再将脚本添加到页中。可以使用此方法将任何脚本插入到页中。请注意,脚本可能在所有元素完成之前呈现到页中;因此,您可能无法从脚本中引用页上的所有元素。

RegisterClientScriptInclude

RegisterClientScriptBlock 方法类似,但此方法将添加引用外部 .js 文件的脚本块。包含文件在任何其他动态添加的脚本之前添加;因此,您可能无法引用页上的某些元素。

RegisterStartupScript

向页中添加一个脚本块,该脚本块在页完成加载后引发页的 onload 事件之前执行。该脚本通常不创建为事件处理程序或函数;它通常只包含要执行一次的语句。

RegisterOnSubmitStatement

添加响应页的 onsubmit 事件而执行的脚本。该脚本在提交页之前执行,允许您取消提交。

下面的代码示例演示如何向页中添加在用户单击按钮(该按钮将页回发至服务器)时执行的客户端脚本。客户端脚本将显示弹出窗口,请求用户确认回发。

protected void
Page_Load(Object sender, EventArgs e)
{
    String scriptText = "return confirm('Do you want to submit the page?')";
    ClientScript.RegisterOnSubmitStatement(this.GetType(),"ConfirmSubmit",scriptText);
}

二。向 ASP.NET Web 服务器控件添加客户端脚本事件:可以像对 HTML 元素那样,以声明方式向 ASP.NET 网页上的控件添加客户端脚本。或者,如果事件或代码依赖仅在运行时可用的信息,可以通过编程方式向 ASP.NET Web 服务器控件添加客户端脚本事件。
有两种方式:
1,以声明方式向 ASP.NET 服务器控件添加客户端事件处理程序
<%@ Page Language="C#" %>
<html>
<head runat="server">
  <title>Untitled Page</title>
  <mce:script type="text/javascript"><!--
      var previousColor;
      function MakeRed()
      {
          previousColor = window.event.srcElement.style.color;
          window.event.srcElement.style.color = "#FF0000";
      }
      function RestoreColor()
      {
          window.event.srcElement.style.color = previousColor;
      }
  
// --></mce:script>
</head>
<body>
  <form id="form1" runat="server">
  <asp:button id="Button1" runat="server" 
    text="Button1" 
      onmouseover="MakeRed();"onmouseout="RestoreColor();" />
  </form>
</body>
</html>

2,以编程方式向 ASP.NET 控件添加客户端事件处理程序

protected void
 Page_Load(Object sender, EventArgs e)
{
    String scriptText = "return confirm('Do you want to submit the page?')";
    ClientScript.RegisterOnSubmitStatement(this
.GetType(), "ConfirmSubmit", scriptText);
}

3.向按钮控件添加客户端 Onclick 事件

<asp:Button ID="Button1" Runat="server"OnClick="Button1_Click" OnClientClick="return confirm('Ready to submit.')" Text="Test Client Click" />

[code] ClientScriptManager类通过键 StringType唯一地标识脚本。具有相同的键和类型的脚本被视为重复脚本。使用脚本类型有助于避免混淆可能用在页中的来自不同用户控件的相似脚本。

在期望不执行回发而从客户端运行服务器代码的情况下,可以使用 ClientScriptManager
 类来调用客户端回调。这称为对服务器执行带外回调。在客户端回调中,客户端脚本函数向 ASP.NET 网页发送异步请求。网页修改其正常生命周期来处理回调。使用 GetCallbackEventReference
 方法获取一个对客户端函数的引用,当调用该函数时,它将启动一个对服务器端事件的客户端回调。

下面介绍下:ClientScriptManager.GetCallbackEventReference 方法:获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。
[/code]
public string GetCallbackEventReference (     
 Control control, //处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供RaiseCallbackEvent 方法。   
 string argument, //从客户端脚本传递给服务器端的一个参数 
 string clientCallback,//一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。     
 string context,//启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。
)

<%@ Page Language="C#" %>
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>

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

<mce:script runat="server"><!--
    
    public int cbCount = 0;
    
    // Define method that processes the callbacks on server.
    public void RaiseCallbackEvent(String eventArgument)
    {
        cbCount = Convert.ToInt32(eventArgument) + 1;
    }

    // Define method that returns callback result.
    public string GetCallbackResult()
    {
        return cbCount.ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Define a StringBuilder to hold messages to output.
        StringBuilder sb = new StringBuilder();

        // Check if this is a postback.
        sb.Append("No page postbacks have occurred.");
        if (Page.IsPostBack)
        {
            sb.Append("A page postback has occurred.");
        }

        // Write out any messages.
        MyLabel.Text = sb.ToString();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;

        // Define one of the callback script's context.
        // The callback script will be defined in a script block on the page.
        StringBuilder context1 = new StringBuilder();
        context1.Append("function ReceiveServerData1(arg, context)");
        context1.Append("{");
        context1.Append("Message1.innerText =  arg;");
        context1.Append("value1 = arg;");
        context1.Append("}");

        // Define callback references.
        String cbReference1 = cs.GetCallbackEventReference(this, "arg", 
            "ReceiveServerData1", context1.ToString());
        String cbReference2 = cs.GetCallbackEventReference("'" + 
            Page.UniqueID + "'", "arg", "ReceiveServerData2", "", 
            "ProcessCallBackError", false);
        String callbackScript1 = "function CallTheServer1(arg, context) {" + 
            cbReference1 + "; }";
        String callbackScript2 = "function CallTheServer2(arg, context) {" + 
            cbReference2 + "; }";

        // Register script blocks will perform call to the server.
        cs.RegisterClientScriptBlock(this.GetType(), "CallTheServer1", 
            callbackScript1, true);
        cs.RegisterClientScriptBlock(this.GetType(), "CallTheServer2", 
            callbackScript2, true);

    }
// --></mce:script>

<mce:script type="text/javascript"><!--
var value1 = 0;
var value2 = 0;
function ReceiveServerData2(arg, context)
{
    Message2.innerText = arg;
    value2 = arg;
}
function ProcessCallBackError(arg, context)
{
    Message2.innerText = 'An error has occurred.';
}
// --></mce:script>

<html  >
<head id="Head1" runat="server">
    <title>ClientScriptManager Example</title>
</head>
<body>
    <form id="Form1" 
          runat="server">
    <div>
      Callback 1 result: <span id="Message1">0</span>
      <br />
      Callback 2 result: <span id="Message2">0</span>
      <br /> <br />
      <input type="button" 
             value="ClientCallBack1" 
             onclick="CallTheServer1(value1, alert('Increment value'))"/>    
      <input type="button" 
             value="ClientCallBack2" 
             onclick="CallTheServer2(value2, alert('Increment value'))"/>
      <br /> <br />
      <asp:Label id="MyLabel" 
                 runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

(以上绝大部分摘自MSDN)


更多话题:

具有验证实现的客户端回调示例生成 ASP .NET Web 应用程序

具有验证实现的客户端回调示例在 Visual Studio 中生成 ASP .NET Web 应用程序

在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调在 Visual Studio 中生成 ASP .NET Web 应用程序

在 ASP.NET 网页中不经过回发而实现客户端回调生成 ASP .NET Web 应用程序

如何:在 ASP.NET 网页中实现回调生成 ASP .NET Web 应用程序

客户端回调实现 (C#) 示例生成 ASP .NET Web 应用程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐