您的位置:首页 > 编程语言 > ASP

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

2008-06-12 12:20 441 查看
由于也是初学者,还不知道它和当前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"

onclick="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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: