ASP.NET 2.0中的客户端回调

asp.net|客户端

有时我们需要使用JavaScript回调服务端以避免回发过程中带来的页面刷新,这样不但减少了页面刷新的延时而且服务端无需处理每次回发的大量视图状态(View State)信息,应用程序的整体性能会有很大的提高。在ASP.NET 2.0中,引入了一个称为"客户端回调"的功能,利用这个内建的解决方案我们可以轻松实现客户端脚本和服务器端代码间的交互,从而避免了页面因回发带来的频繁刷新。
为了实现客户端回调,你的页面类必须实现一个ICallbackEventHandler接口。其声明如下:

using System;

namespace System.Web.UI
{
    // 摘要:
    //     用于指示控件可以作为服务器的回调事件的目标。
    public interface ICallbackEventHandler
    {
        // 摘要:
        //     返回以控件为目标的回调事件的结果。
        //
        // 返回结果:
        //     回调的结果。
        string GetCallbackResult();
        //
        // 摘要:
        //     处理以控件为目标的回调事件。
        //
        // 参数:
        //   eventArgument:
        //     一个字符串,表示要传递到事件处理程序的事件参数。
        void RaiseCallbackEvent(string eventArgument);
    }
}

而客户端的JavaScript要通过ClientScript.GetCallbackEventReference函数回调页面,以下是该函数的说明:

public string GetCallbackEventReference (Control control,string argument,string clientCallback,string context)

  参数:

参数 作用
control 处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。
argument 从客户端脚本传递一个参数到服务器端的RaiseCallbackEvent 方法。
clientCallback 一个客户端事件处理程序的名称,该处理程序接收服务器端事件返回的结果。
context 启动回调之前在客户端的客户端脚本信息。脚本的结果传回给客户端事件处理程序。
返回值 调用客户端回调的客户端函数的名称。

下面是ClientScriptManager.GetCallbackEventReference 方法的重载列表

名称 说明
ClientScriptManager.GetCallbackEventReference (Control, String, String, String) 获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本和上下文。
ClientScriptManager.GetCallbackEventReference (Control, String, String, String, Boolean) 获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本、上下文和布尔值。
ClientScriptManager.GetCallbackEventReference (Control, String, String, String, String, Boolean) 获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的控件、参数、客户端脚本、上下文、错误处理程序和布尔值。
ClientScriptManager.GetCallbackEventReference (String, String, String, String, String, Boolean) 获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的目标、参数、客户端脚本、上下文、错误处理程序和布尔值。 我们就整个程序作个系统的说明,并且列出前台的页面代码和后台的逻辑代码,这样可以使得你对程序有个直观的理解。

 下面是一个简单示例的源代码:

Default.aspx.cs:

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;

public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
    //定义一个字符串,回调的结果信息将保存在该字符串中
    private string result;

    //引发回调事件处理
    public void RaiseCallbackEvent(string eventArgument)
    {
        result = "从服务器端返回的内容:" + eventArgument;
    }

    //回传回调结果
    public string GetCallbackResult()
    {
        return result;
    }
}

Default.aspx:

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

<!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 runat="server">
    <title>客户端回调</title>

</head>
<script type="text/javascript">

function CallServer(inputcontrol, context)
{
 //回调还没有处理完全时其预先加载的显示值
 context.innerHTML = "加载中......";
 //为你在文本框中输入的信息,并且arg在这里就是将其值传递到
 //RaiseCallbackEvent(String eventArgument)方法对应的eventArgument中
 arg = inputcontrol.value;
 //获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。
 <%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>; 
}

function ReceiveServerData(result, context)
{
    context.innerHTML = result;
}

</script>
<body>
    <form id="form1" runat="server">
    <div>
        请输入信息: <asp:TextBox ID="txtEnter" runat="server"></asp:TextBox>
        <input id="Button1" type="button" value="回调服务端" onclick="CallServer(txtEnter,lblShow)" /> 
        <br />
        <asp:Label ID="lblShow" runat="server" Width="219px"></asp:Label>
        </div>
    </form>
</body>
</html>

时间: 2024-11-22 20:05:47

ASP.NET 2.0中的客户端回调的相关文章

ASP.NET 2.0 中的客户端脚本

asp.net|脚本|客户端 在使用 ASP.NET 的时候,我们仍然在许多情况下需要使用客户端脚本.以下是笔者根据自己的经验和一些粗浅的研究,对此作一个简要的总结. 一.在 HTML 里直接写脚本 这个方法是最简单的,直到如今我写网页的时候也几乎还是使用最多的一种方式.也许一些经常使用 RegisterClientScriptBlock 的人会觉得这种方法老土,不过在我看来,它除了可以减少编译时间以外,更主要的是可以减少代码量,可读性也要好一些,更或许还可以避免一些潜在的错误. 但是有些情况下

探讨ASP.NET 2.0中的Web控件改进技术

asp.net|web|控件 ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这些内容展开全面探讨. 一. 引言 到目前为止,你可能已经了解了大量的ASP.NET 2.0新特征-母版页面,主题,提供者,等等--所有这样内容都相当精彩;但是,你是否了解到有关定制Web控件开发方面的重大变化?这正是我在本文中所想讨论的.如果你已经从事于控件开发,那么,我想本文所描述的ASP.NET 2.0中的新的改进特征会立即应用于

ASP.NET 2.0中实现跨页面提交

asp.net|页面 在ASP.NET 1.X 版本中,页面都是提交到自己本身,并不能方便的指定需要提交的目的页面.例如FirstPage.aspx中的button只能提交到FirstPage.aspx,而不能提交到SecondPage.aspx.很多时候,ASP.NET 1.X这样工作方式使我们的开发方式受到不少限制.熟悉ASP/JSP/PHP的朋友大概很不习惯,因为以前经常使用的提交方式突然无法使用,虽然也有解决这个问题的方法(演示Webcast),可是过程太烦琐,不甚方便.令我们高兴的是,

ASP.NET 2.0中的页面输出缓存

asp.net|缓存|页面 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出

ASP.NET 2.0 中的窗体身份验证

asp.net 概述 窗体身份验证使用用户登录到站点时创建的身份验证票,然后在整个站点内跟踪该用户.窗体身份验证票通常包含在一个 Cookie 中.然而,ASP.NET 2.0 版支持无 Cookie 窗体身份验证,结果是将票证传入查询字符串中. 如果用户请求一个需要经过身份验证的访问的页,且该用户以前没有登录过该站点,则该用户重定向到一个配置好的登录页.该登录页提示用户提供凭据(通常是用户名和密码).然后,将这些凭据传递给服务器并针对用户存储(如 SQL Server 数据库)进行验证.在 A

在ASP.NET 2.0中使用样式、主题和皮肤

asp.net ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改变主题的内容,而不用改变站点的单个页面,就可以轻易地改变站点的样式.主题也可以在开发者之间共享. ASP.NET包含了大量的用于定制应用程序的页面和控件的外观和感觉的特性.控件支持使用Style(样式)对象模型来设置格式属性(例如字体.边框.背景和前景颜色.宽度.高度等等).控件也支

在 ASP.NET 2.0 中上载文件

asp.net 简介自引入 Microsoft ASP.NET 版本 1.0 之日起,就存在生成 Web 应用程序的内置方法,这些方法能够将文件上载到宿主服务器.这是通过使用 File Field HTML 服务器控件实现的.我以前写过一篇关于如何在 ASP.NET 应用程序中有效使用该控件的 MSDN 文章.本文将再次介绍文件上载过程,但不是使用 File Field 控件,我将向您介绍如何有效使用 ASP.NET 2.0 提供的新 FileUpload 服务器控件. 虽然本文向您介绍新增的

ASP.NET 2.0 中收集的小功能点

asp.net 1.asp.net 2.0中的MaxPageStateFieldLength 属性 在asp.net 2.0中,可以强制对viewstate进行分段传输了,使用的是Page.MaxPageStateFieldLength 属性,可以设置viewstate中,每个页面状态字段的最大字节数.格式如下,要在WEB.CONFIG文件里设置的:    <pages maxPageStateFieldLength="5" />    其中,将设置把viewstate为不

ASP.NET 2.0中层次数据的处理

asp.net|数据 数据源控件可以同时暴露平面表格式的或层次的数据.前面演示的SqlDataSource和ObjectDataSource控件都是平面表格式的数据源控件.ASP.NET 2.0还包含两个层次数据源控件:用于连接XML文件的XmlDataSource和用于连接站点导航数据的SiteMapDataSource.这一部分将介绍这些控件的使用技术. TreeView和Menu控件 数据绑定控件与数据源控件类似,也可以是层次的.表格式数据绑定控件显示数据列表或表格,层次数据绑定控件能够用