mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
個人BLOG
it developer
  1. Main page
  2. DotNET
  3. Main content

ASP.NET实现回调服务器的简单方法

2009-11-02 96hotness 0likes 0comments

在开发ASP.NET应用程序的过程中, 我们经常需要在不刷新页面的情况下回调服务器的一些信息.人们喜欢用一些集成的的类库来处理,其实,ASP.NET本身已以内置了服务器回调的信息.下面是一个简单的例子:
要实现回调,服务器必须实现 ICallbackEventHandler  接口.
如下:
public partial class _Default : System.Web.UI.Page ,ICallbackEventHandler
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.GetCallbackEventReference(this, "","", "");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write("");
    }
     void ICallbackEventHandler.RaiseCallbackEvent(String eventArgument)
    {
    }
     string ICallbackEventHandler.GetCallbackResult()
    {
        return "Data from server...";
    }
}
方法:Page.ClientScript.GetCallbackEventReference(this, "","", "");是为了能够在页面中导入回调时要使用的JS脚本.这里只使用了最简单的方法.目的只是为了在页面中导入JS脚本,没有执行其它任何操作.在导入的JS脚本里有一个WebForm_DoCallback()方法,我们实现回调主要就是依靠这个方法来实现的.
下面是WebForm_DoCallback()方法的原形:


function WebForm_DoCallback(
eventTarget,eventArgument,
eventCallback,
context,
errorCallback,
useAsync);


eventTarget:指回调事件所指向的对象,一般使用:"__Page"来代替.


eventArgument:指回调事件使用的参数,这个参数一定要是字符串类型的.如果要传递对象的话,可以把对象转换成  字符串或其它可以还原为对象的字符串.这个参数会发送到服务器上,由上面的类中的方法: 
RaiseCallbackEvent(String eventArgument)所接收,即在服务器上,我们使用 


RaiseCallbackEvent(String eventArgument)的参数就是客户端上传的参数.


eventCallback:指当服务器事件执行完成后,会调用eventCallback参数所指向的方法.这个方法由两个参数.
一般  是这样:
function callbackEvent(arg,context){......}.这里,第一个参数是由服务器上的方法
GetCallbackResult()所返回的字符串.也必须是字符串类型的数据.
第二个参数是我们回调  服务器时WebForm_DoCallback()方法中的context参数,
它没有上传到服务器,而是在客户端传送的,虽然它是字符串类型,但实际上它可以是任何javascript支持的数据类型.  如数组,对象等等.


下面是一段客户端代码:实现简单的回调.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>


    <script type="text/javascript">
        function DoCallBack(arg, evt, context) {
            WebForm_DoCallback("__Page", arg, evt, context, null, false);
        }


        function btnCallback(arg, context) {
            DoCallBack(arg, this.callbackEvent, context);
        }


        function callbackEvent(arg, context) {
            alert(arg + context);
        }
    </script>


</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="button" value="Callback" onclick="btnCallback(1, 'Message')" />
    </div>
    </form>
</body>
</html>



在这里我对WebForm_DoCallback进行了一下简单的封装,方面直接调用回调的方法.需要注意的是:我们要实现回调的话,在aspx页面中必须有一个运行在服务器上的form否则的话,服务器是不会在客户端的页面上导出实现回调功能的脚本的.

Tag: Nothing
Last updated:2009-11-02

mikebai

This person is a lazy dog and has left nothing

Like
< Last article
Next article >

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang