在ASP.NET 网页中不经过回发而实现客户端回调

        由于也是初学者,还不知道它和当前ajax之间有什么联系,个人感觉用这种方法就可以实现异步刷新页面了,那为什么还要用到ajax技术了呢?难道客户端回调只属于.net下面特有的,而ajax是无平台区分的么?

下面是我对.net中回调一些理解,难免有些肤浅,希望大家指正。

1.首先要对页面实现ICallbackEventHandler 接口,这主要是让控件可以作为服务器回调事件的目标

一般做法是让页面继承该接口:public partial class calltest :System.Web.UI.Page, System.Web.UI.ICallbackEventHandler {               后台代码                   }

2.实现RaiseCallbackEvent和GetCallbackResult方法,其中RaiseCallbackEvent(个人理解:回调函数会自动执行这个事件)用来处理客户端传递过来的变量,GetCallbackResult主要是返回回调的结果。

3.定义一个管理客户端脚本对象ClientScriptManager,这个对象在后面用得上。

4.根据第三步对象,使用它的方法GetCallbackEventReference(),该方法是获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。 这个方法里有几个参数,其中常见的:

control

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

argument

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

RaiseCallbackEvent 方法。

clientCallback

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

context

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

5.让后将上面脚本注册到客户端,当客户端响应到注册脚本时,则会调用回调函数,回调函数可以响应操作并返回一些值,这样就可以和客户端进行交互,实现无刷新。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="call.aspx.cs" Inherits="calltest" %>



<!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 id="Head2" runat="server">

    <title>ClientScriptManager Example</title>

    <script type="text/javascript">

function ProcessCallBackError(arg, context)

{



    Message2.innerText = 'An error has occurred.';

}

</script>

</head>

<body>

    <form id="Form1" 

          runat="server">

    <div>

      <input type="button" 

             value="ClientCallBack2" 

             οnclick="CallTheServer2(value2,'')"/>

      <br /> <br />

      <asp:Label id="MyLabel" 

                 runat="server"></asp:Label>

                 <div id="test"></div>

    </div>

    </form>

</body>

</html>



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;

using System.Net;

using System.Text;

public partial class calltest :System.Web.UI.Page, System.Web.UI.ICallbackEventHandler {

    public ArrayList x = new ArrayList();



    // Define method that processes the callbacks on server.

    public void RaiseCallbackEvent(String eventArgument)

    {

        x.Add("1");

        x.Add("2");

        x.Add("1");

        x.Add("1");

        x.Add("1");

        x.Add("2");

        x.Add("2");

        x.Add("2");

    }

    // Define method that returns callback result.

    public string  GetCallbackResult()

    {

        string y;

        y = "<table border='1px'><tr><td>";

        for (int i = 0; i < x.Count; i++)

        {

            y += x[i];

            y += "</td></tr><tr><td>";

        }

        y += "</td></tr>";    

        return y ;

    }

    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; 



        String cbReference2 = cs.GetCallbackEventReference("'" +

            Page.UniqueID + "'", "t", "ReceiveServerData2", "function ReceiveServerData2(t,context){"+

            " document.getElementById('test').innerHTML=t;}",

            "ProcessCallBackError", true);



        //String cbReference2 = cs.GetCallbackEventReference("'" +

        //    Page.UniqueID + "'", "t", "ReceiveServerData2", "",

        //    "ProcessCallBackError", false);



        String callbackScript2 = "function CallTheServer2(t, context) {" + cbReference2 + "}";



        // Register script blocks will perform call to the server.

        cs.RegisterClientScriptBlock(this.GetType(), "CallTheServer2",

            callbackScript2, true);



    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值