`
wangyihust
  • 浏览: 437008 次
文章分类
社区版块
存档分类
最新评论

Asp.Net2.0无刷新客户端回调

阅读更多

Asp.Net2.0无刷新客户端回调(笔记)

 

按照  一帆(老鼠粮仓之路) 的文章,在2005正式版,有些不能实现,譬如方法RaiseCallbackEvent(string arg)的返回类型在vs2005中为void,而不算beta版中的string。

所以代码有些修改,记录如下:

首先说一下:Page.ClientScript
        //Page.ClientScript
        //获取用于管理脚本、注册脚本和向页添加脚本的 System.Web.UI.ClientScriptManager 对象。
        //返回结果:
        //     一个 System.Web.UI.ClientScriptManager 对象。


ClientScriptManager对象 是一些 在 Web 应用程序中定义用于管理客户端脚本的方法,其中有一个方法重载:
GetCallbackEventReference(……):
string GetCallbackEventReference(Control control, string argument, string clientCallback, string context)
获取一个对客户端函数的引用;
调用该函数时,将启动一个对服务器端事件的客户端回调。
此重载方法的客户端函数包含指定的控件、参数、客户端脚本和上下文。
参数::
            control: 处理客户端回调的服务器 System.Web.UI.Control。该控件必须实现
                        System.Web.UI.ICallbackEventHandler接口并提供
                        System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(System.String)方法

            argument: 从客户端脚本传递给服务器端的一个参数
                            System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(System.String)方法

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

            context: 启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。//具体什么意思还是不太清楚

返回结果:    调用客户端回调的客户端函数的名称。
GetCallbackEventRefernce发送到了客户端的代码是这样的: 
                WebForm_DoCallback('__Page',message,ShowServerTime,context,null,false)
message:arg
ShowServerTime:ReceiveServerData

三种客户端回调方法:
第一种:添加 ServerTime.aspx 页面
前台代码:

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

<!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>
    <script language="javascript" type="text/javascript">
         function GetServerTime()
         {
            var message = '';
            var context = '';
           
            <%=sCallBackFunctionInvocation%>
         }
        
         function ShowServerTime(timeMessage, context)
         {
            alert('现在服务器上的时间是:\n' + timeMessage);
         }
     </script>
</head>
<body>
    <form id="form1" runat="server">
      <input type="button" value="得到服务器端时间" onclick="GetServerTime();" />
    </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;

public partial class _3_ServerTime : System.Web.UI.Page, ICallbackEventHandler
    //System.Web.UI.ICallbackEventHandler
//一定要实现ICallbackEventHandler接口,用于指示控件可以作为服务器的回调事件的目标。
{
    public string sCallBackFunctionInvocation;

    protected void Page_Load(object sender, EventArgs e)
    {
        sCallBackFunctionInvocation =
                        Page.ClientScript.GetCallbackEventReference(this, "message", "ShowServerTime", "context");
        //因为它会返回个ClientScriptManager, ClientScriptManager管理所有的客户端脚本。
        //然后在前台某个按钮的onclick事件里<%=那个public后台字符串% >.
        //此方法 发送到客户端代码是:WebForm_DoCallback('__Page',message,ShowServerTime,context,null,false)
    }

    public void RaiseCallbackEvent(string eventArgument)
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     处理以控件为目标的回调事件。
        // 参数:
        //   eventArgument:
        //     一个字符串,表示要传递到事件处理程序的事件参数。
    }

    public string GetCallbackResult()
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     返回以控件为目标的回调事件的结果。
        //
        // 返回结果:
        //     回调的结果。
        return DateTime.Now.ToString();
    }
}


第二种方法:在上面的方法中我们必须要在前台绑定后台,那么如果不绑定呢?我们怎么做:
直接把GetCallbackEventReference当做js函数中的一个实现内容,然后把这个js函数注册到客户端。
新建页面TestPage.aspx

前台代码:

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

<!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>
    <script type="text/javascript">
        function test()
        {
            var lb = document.getElementById("Select1");
            //取的那个下拉框
            var con = lb.options[lb.selectedIndex].text;
            //得到你选择的下拉框的文本再调用呢个CallTheServer,是一个由服务器端输出的js函数
            CallTheServer(con,'');  //此方法由 后台生成到前台来
        }
        function ReceiveServerData(rValue)
        {
            Results.innerHTML = rValue;
            //在<span id="Results"></span>添加由后台生成的方法 CallTheServer(con,'');
        }
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <select id="Select1">
            <option value='1' selected="selected">老鼠徒弟</option>
            <option value='2'>吴旗娃师傅</option>
        </select>
        <br />
        <br />
        <input onclick="test()" value="从服务器返回下拉框文本" type='button'/>
        <br />
        <br />
        <span id="Results"></span>
        <br />
    </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;

public partial class _3_TestPage : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
    protected void Page_Load(object sender, EventArgs e)
    {
        String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
        String callbackScript;
        callbackScript = "function CallTheServer(arg,context)" +
         "{ " + cbReference + "} ;";
        Page.ClientScript.RegisterStartupScript(this.GetType(), "abcdefg", callbackScript, true);
        //第四个参数代表是不是要自动给着脚本加上<script type="text/javascript"></script>标记,当然要加啊

    }

    private string SelectValue;
    public void RaiseCallbackEvent(string eventArgument)
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     处理以控件为目标的回调事件。
        // 参数:
        //   eventArgument:
        //     一个字符串,表示要传递到事件处理程序的事件参数。
        SelectValue = eventArgument;
    }

    public string GetCallbackResult()
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     返回以控件为目标的回调事件的结果。
        //
        // 返回结果:
        //     回调的结果。
        return "你选择的是:" + SelectValue;
    }
}



第三种:前面两种都是<input type="button"的html控件,那么如果是WEB按钮控件呢?当然也可以,在后台添加服务器按钮的onclick 属性。
新建 third.aspx 页面
前台代码:

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

<!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>
<body>
    <form id="form1" runat="server">
    <div>
        <select id="Select1">
            <option selected="selected" value='1'>老鼠徒弟</option>
            <option value='2'>吴旗娃师傅</option>
        </select>
        <asp:Button ID="Button1" runat="server" Text="这是个服务器按钮" />
    </div>
   
    <div id="div1" />
   
    <script type="text/javascript">
            function Re(ret)
            {
               document.getElementById("div1").innerHTML = ret;
               alert(ret);
            }
    </script>
    </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;

public partial class _3_third : System.Web.UI.Page,System.Web.UI.ICallbackEventHandler
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //第四个参数为null,因为你不可能再在js中给他传参数了
        string str = Page.ClientScript.GetCallbackEventReference(this,
            "document.getElementById('Select1').options[document.getElementById('Select1').selectedIndex].text",
            "Re", null);
        //return false是为了防止提交窗体
        Button1.Attributes.Add("onclick", str + ";return false;");
    }

    private string SelectValue;
    public void RaiseCallbackEvent(string eventArgument)
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     处理以控件为目标的回调事件。
        // 参数:
        //   eventArgument:
        //     一个字符串,表示要传递到事件处理程序的事件参数。
        if (eventArgument == "老鼠徒弟")
        {
            SelectValue = "老鼠徒弟:人生如鼠,不在仓就在厕!";
        }
        else
        {
            SelectValue = "吴旗娃师傅:自信自强,乐观向上";
        }
    }

    public string GetCallbackResult()
    {
        //  ICallbackEventHandler接口 要实现的方法
        //     返回以控件为目标的回调事件的结果。
        //
        // 返回结果:
        //     回调的结果。
        return  SelectValue;
    }
}


小技巧,当你写完System.Web.UI.ICallbackEventHandler后,把鼠标移上去,那么System前面'S'下面会有个小红线,点他会自动写好那个RaiseCallbackEvent代码。

 

原文: http://anan.cnblogs.com/articles/340445.html

后台代码:
分享到:
评论

相关推荐

    ASP.NET2.0实现无刷新客户端回调的Callback机制

    通过研究和调试这个项目,可以更好地理解和掌握无刷新客户端回调的工作原理及其在实际开发中的应用。同时,也可以学习如何结合其他ASP.NET控件和功能,如按钮、文本框等,来创建更复杂的交互式Web应用。

    ASP.NET 2.0客户端回调实例代码

    ASP.NET 2.0客户端回调技术是Web应用程序中一种提高用户体验的方法,它允许页面部分更新而无需进行完整的页面刷新。这种技术在不打断用户交互的情况下提供了更快的响应速度,极大地提升了网页应用的性能和效率。在...

    ASP.NET 2.0客户端回调的实现分析

    ASP.NET 2.0客户端回调技术是微软在Web开发领域引入的一种创新机制,它允许Web应用程序在不重新加载整个页面的情况下与服务器进行交互,提高了用户体验并降低了网络带宽的消耗。这种技术的核心在于Asynchronous Page...

    ASP.NET 2.0 正式版中无刷新页面的开发.

    在ASP.NET 2.0中,无刷新页面开发主要依赖于ICallbackEventHandler接口和客户端脚本的支持。以下是对这个知识点的详细解释: **ICallbackEventHandler接口** ICallbackEventHandler是ASP.NET 2.0提供的一种机制,...

    asp.net 2.0使用ajax实现客户端回调功能详解

    在探讨ASP.NET 2.0如何使用Ajax实现客户端回调功能之前,我们首先简要回顾一下ASP.NET 2.0和Ajax的基本概念。 ### ASP.NET 2.0简介 ASP.NET 2.0是Microsoft推出的一个用于开发Web应用程序的框架,它是.NET ...

    无刷新asp.net2.0

    在"无刷新asp.net2.0"这个主题中,我们可以看到它强调的是如何在ASP.NET 2.0环境下利用Ajax技术实现页面的无刷新更新。"Callback"可能指的是回调函数,这是在异步请求中常见的一种处理机制,当服务器响应完成时,回...

    Asp.Net2.0下客户端脚本调用服务端函数的研究.pdf

    【Asp.Net 2.0 客户端脚本调用服务端函数】 Asp.Net 2.0 是微软推出的Web应用程序开发框架,它允许开发者创建动态、交互式的Web应用程序。在B/S(Browser/Server)架构下,即浏览器与服务器架构中,用户通过浏览器...

    ASP.NET 2.0 AJAX 组件安装软件集合

    在实际开发中,使用ASP.NET 2.0 AJAX组件时,开发者还需要了解如何处理异步回调、状态管理、错误处理以及与现有ASP.NET控件的集成。同时,为了调试目的,开发者通常会使用debug版本的脚本库,这可以帮助他们定位...

    征服 asp.net 2.0 ajax 下

    2. **异步回调和Partial Page Rendering**:ASP.NET AJAX的异步回调机制允许只更新页面的一部分,而不是整个页面,这大大减少了网络传输的数据量。Partial Page Rendering是实现这一功能的关键,它使得只有发生改变...

    ASP.NET2.0+AjaxPro留言本

    在这个"ASP.NET2.0+AjaxPro留言本"项目中,我们可以学到以下关键知识点: 1. **ASP.NET 2.0基础知识**:了解ASP.NET 2.0的核心组件,如页生命周期、控件事件模型、母版页(Master Pages)、配置管理、 Membership ...

    征服 asp.net 2.0 ajax 中

    在ASP.NET 2.0中引入的AJAX支持,允许开发者利用JavaScript实现局部页面更新,无需刷新整个页面即可与服务器进行通信,提升了用户体验。 **ASP.NET AJAX的主要组件和功能:** 1. **Microsoft AJAX Library**: 这是...

    PHP TO ASP.NET 2.0开发系列课程(3):PHP深入编程之AJAX应用

    例如,使用$.ajax()函数可以轻松地发起GET或POST请求,并设置回调函数处理响应。同时,会讲解如何在PHP中处理这些请求,包括接收参数、执行操作和构建响应。 另一方面,ASP.NET 2.0提供了内置的AjaxControlToolkit...

    ASP.NET2.0 WEB实时进度条

    1. **UpdatePanel**:ASP.NET AJAX 控件套件中的UpdatePanel是一个无刷新的区域,它可以模拟页面的部分刷新,允许开发者在不重新加载整个页面的情况下更新部分UI。在进度条场景中,UpdatePanel可以在服务器端执行...

    asp.net 2.0版聊天室

    - **AJAX(Asynchronous JavaScript and XML)**:ASP.NET 2.0支持AJAX,通过局部刷新技术,实现无刷新的聊天体验。 - **Web Services或WCF**:可能使用这些服务来实现客户端与服务器之间的通信,传输聊天消息。 ...

    征服ASP.NET 2.0 Ajax之CascadingDropDown关联菜单的使用实例

    Ajax(Asynchronous JavaScript and XML)技术则为ASP.NET 2.0提供了无刷新用户体验,增强了用户交互性。在ASP.NET 2.0中,微软引入了一个名为"CascadingDropDown"的控件,它允许在网页上实现级联下拉菜单的效果,...

    asp.net2.0 AjaxControl组件(开源)

    ASP.NET 2.0 AJAX Control Toolkit 是一个非常实用的开源工具集,专为开发者提供了一系列易于使用的、基于AJAX的控件和扩展,以增强ASP.NET应用程序的用户体验。这个工具包使得开发人员能够轻松地在网页中实现异步...

    征服ASP.NET 2.0 Ajax——Web开发技术详解(光盘使用说明)

    - **CallbackRefresh**:利用ASP.NET 2.0的回调特性实现局部刷新。 - **IframeRefresh**:通过嵌入iframe的方式实现局部刷新。 - **JsRefresh**:纯JavaScript方式实现局部刷新。 **第4章:CSS制作方法** - **...

    使用ajax+asp.net2.0 开发rss阅读器

    在这个"使用ajax+asp.net2.0 开发rss阅读器"的项目中,我们将深入探讨如何结合JavaScript、XMLHTTP对象、CSS和DOM来创建一个高效的RSS阅读器。 首先,让我们了解AJAX的基本原理。AJAX通过XMLHTTP请求(在现代浏览器...

Global site tag (gtag.js) - Google Analytics