现在的位置: 首页 > 综合 > 正文

asp.net与js无刷新交互(ICallbackEventHandler接口)

2012年11月01日 ⁄ 综合 ⁄ 共 3725字 ⁄ 字号 评论关闭

在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作。此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器。但是,在有些情况下,需要从客户端运行服务器代码,而不执行回发。如果页中的客户端脚本维护一些状态信息(例如,局部变量值),那么发送页和获取页的新副本就会损坏该状态。此外,页回发会导致处理开销,这会降低性能,且会让用户不得不等待处理并重新创建页。

     废话不多说,看源码

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>ICallbackEventHandler</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<script type="text/javascript">
function ReceiveServerData(rValue) { //声明一个JS方法
document.getElementById("result").innerHTML=rValue; //给DIV赋值
}
</script>
<div id="result"></div>
<input id="Button1" type="button" value="GetTime" onclick ="CallServer('GetTime')" />
<input id="Button2" type="button" value="GetDate" onclick ="CallServer('GetDate')" />
</div>
</form>
</body>
</html>

     后置代码

using System;
using System.Data;
using System.Configuration;
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;

//http://www.lordz.cn
//继承 System.Web.UI.ICallbackEventHandler
public partial class _Default : System.Web.UI.Page ,System.Web.UI.ICallbackEventHandler
{
    public string CallBackValue = null;

    // 注册脚本到前台页面
    protected void Page_PreRender(object sender, EventArgs e)
    {
        RegClientScript();                                                             
    }
    // javascript函数(服务器端事件的客户端回调)
    protected void RegClientScript()
    {
        ClientScriptManager cs = Page.ClientScript;
        string jstxt = @"
                  function CallServer(arg)
                  {
                     " + cs.GetCallbackEventReference(this, "arg", "ReceiveServerData", null) + @";
                  }";
        cs.RegisterStartupScript(this.GetType(), "CallServer", jstxt, true);
    }

    //ICallbackEventHandler接口
    //把值传到前台
    string ICallbackEventHandler.GetCallbackResult()
    {
        return CallBackValue;
    }

    //按受前台的参数
    void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
    {
        switch (eventArgument)
        {
            case "GetTime":
                this.CallBackValue = DateTime.Now.ToShortTimeString();
                break;
            case "GetDate":
                this.CallBackValue = DateTime.Now.ToShortDateString();
                break;
            default:
                this.CallBackValue = "NULL";
                break;
        }
    }
}

 /*
 * 1.继承ICellbackEventHendler,实现接口
 * 2.向前台注册个回调方法
 * 3.通过RaiseCallbackEvent方法接收到前台传上的值
 * 4.在RaiseCallbackEvent方法中做完后,通过GetCallbackResult方法返回值,并调用传上的方法
 * 5.实现回调
 */

获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。

参数描述

control

处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。

target(用control.UniqueID获得)

处理客户端回调的服务器 Control 的名称。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。

argument(用来传递字符串对象给服务器端,RaiseCallbackEvent 方法中接收参数可获取此值)

从客户端脚本传递给服务器端的一个参数 

clientCallback(回调成功后触发该脚本函数,此处用于注册该名称)

一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。

context(可以传入一个脚本函数或一个客户端对象,下面将介绍两种不同的表现方式)

启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。

clientErrorCallback(回调失败后触发该脚本函数,此处用于注册该名称)

客户端事件处理程序的名称,该处理程序在服务器端事件处理程序出现错误时接收结果。

useAsync

true 表示同步执行回调;false 表示异步执行回调。

重载列表

名称  说明 

ClientScriptManager.GetCallbackEventReference (Control, String(argument), String(clientCallback), String(context))  获取一个对客户端函数的引用;调用该函数时,将启动一个对服务 器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本和上下文。 

ClientScriptManager.GetCallbackEventReference (Control, String(argument), String(clientCallback), String(context), Boolean)  获取一个对客户端函数的引用;调用该函数 时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本、上下文和布尔值。 

ClientScriptManager.GetCallbackEventReference (Control, String(argument), String(clientCallback), String(context), String(clientErrorCallback), Boolean)   获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本、上下 文、错误处理程序和布尔值。 

ClientScriptManager.GetCallbackEventReference (String(target), String(argument), String(clientCallback), String(context), String(clientErrorCallback), Boolean) 

抱歉!评论已关闭.