客户端回调本质上就是指通过前端的客户端脚本向服务器端传递相应的数据参数,服务器端再以接受到的参数进行查询和处理,最后将结果回传到客户端进行显示。asp.net 2.0提供了实现无刷新回调的接口ICallbackEventHandler.为了实现客户端回调,你必须实现一个ICallbackEventHandler接口,该接口定义了两个方法法RaiseCallbackEvent和GetCallbackResult. RaiseCallbackEvent()从浏览器接受一个字符串作为事件参数,即该方法接受客户端JavaScript传递的参数,注意它是首先触发的。接下来触发的就是GetCallbackResult()方法,它将所得到的结果传回给客户端的JavaScript,JavaScript再将结果更新到页面。下面以实例说明:

 
Code
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq; namespace Ajax
{
    /**//*ICallbackEventHandler接口封装了从客户端的JavaScript通过XmlHttp方式调用服务器端的代码,
     * 所以只要在页面中实现了这个接口,便可以无需要使用其它的Ajax框架
     * 或是自己动手写XmlHttp请求这两种方式实现异步回调,可以避免回发过程中带来的页面刷新,
     * 这样不但减少了页面刷新的延时而且服务端无需处理每次回发的大量视图状态(View State)信息,
     * 应用程序的整体性能会有很大的提高。
     */
    public partial class AjaxCall : System.Web.UI.Page,ICallbackEventHandler
    {
        protected void Page_Load(object sender, EventArgs e)
        {         }         string text = string.Empty;
        /**//*ICallbackEventHandler 接口。
        继承这个接口需要实现两个方法RaiseCallbackEvent和GetCallbackResult,
        其中,RaiseCallbackEvent用来处理客户端提交的请求,RaiseCallbackEvente有一个string类型的参数,
        是客户端提交到服务器端的参数。而GetCallbackResult方法则负责把服务器端的处理结果返回到客户端。
        */        //GetCallbackResult方法则负责把服务器端的处理结果返回到客户端。
        public string GetCallbackResult()
        {
            return text;
        }
        //RaiseCallbackEvent用来处理客户端提交的请求,RaiseCallbackEvente有一个string类型的参数,是客户端提交到服务器端的参数
        public void RaiseCallbackEvent(string eventArgument)
        {
            text =eventArgument+"---------"+DateTime.Now.ToLocalTime().ToString();
        }
        
    }
}  

前台代码如下:

 
Code
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>AJAX回调模式</title>
    <script type="text/javascript">
    //回调函数
    function receiveServerData(arg,context)
    {
        document.getElementById("result").innerHTML=arg;
    }
    /**//* 为了向服务器页发送回调和接收结果这两个功能,
    可以在客户端定义两个脚本函数来实现用ClientScriptManager类
    的GetCallbackEventReference方法在客户端注册一个向服务器端发送请求的函数。
    Page.ClientScript获得页面的ClientScriptManager引用,GetCallbackEventReference注册发送回调请求的函数。
    */
    
    /**//*
      public string GetCallbackEventReference (Control control,string argument,string clientCallback,string context)   参数 作用 
control 处理客户端回调的服务器 Control。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。  
argument  从客户端脚本传递一个参数到服务器端的RaiseCallbackEvent 方法。  
clientCallback  一个客户端事件处理程序的名称,该处理程序接收服务器端事件返回的结果。 
context 启动回调之前在客户端的客户端脚本信息。脚本的结果传回给客户端事件处理程序。  
返回值 调用客户端回调的客户端函数的名称。 
*/
    function callServer(arg,context)
    {
        <%=ClientScript.GetCallbackEventReference(this,"arg","receiveServerData","context") %>;
    }
    
  //---------------------------------------------  
    function RServerData(arg,context)
    {
       context.value=arg;
    }
    function Call(Input,context)
    {   
        arg=Input.value;
        <%=ClientScript.GetCallbackEventReference(this,"arg","RServerData","context") %>;
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
<input type="button" value="Submit" onclick="callServer()" />
   
<div id="result"> </div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
     <input id="button" type="button" value="submit" onclick="Call(TextBox1,TextBox2)"/>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </form>
</body>
</html>

Asp.net中的ajax回调模式(ICallbackEventHandler)的更多相关文章

  1. 在Asp.Net MVC中用Ajax回调后台方法

    在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...

  2. ASP.Net 中操作Ajax

    有时候,越深入去了解一个点,越发觉得自己无知,而之前当自己晓得一两个片面的点还洋洋自得,殊不知,这是多么讽刺,JQuery中有很多优势,比如异步提交值,部分刷新,给用户很好的体验感.目前为止,大部分项 ...

  3. Objective-C中的Block回调模式

    在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block.感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道.如果 读者之前用过SS ...

  4. 在ASP.MVC中使用Ajax

    Asp.net MVC 抛弃了Asp.net WebForm那种高度封装的控件,让我们跟底层的HTML有了更多的亲近.可以更自由.更灵活的去控制HTML的结构.样式和行为.Asp.net MVC可以更 ...

  5. ASP.NET中实现Ajax分页

    在页面中指定一个div容器来接收动态生成的分页数据: <div id="div_menu"> </div> 使用jQuery来请求并处理Json格式数据: ...

  6. 在asp.net中使用ajax记录

    一.问题描述 ajax在mvc中使用频繁,比如cms中的评论功能,但由于涉及到前后端开发,日久容易忘,在此做下记录. 二.内容 控制器中代码示例: /// <summary> /// 在文 ...

  7. Asp.net中Postback及Callback

    我们知道,在默认的情况下,当我们点击Asp.net Page中的一个服务器Button时(默认其实是Submit Form),会导致Page被Recreated,这个过程我们称之为Postback,它 ...

  8. ASP.NET中Ajax的用法

    在ASP.NET中应用Ajax的格式如下: 前台代码(用JQuery库) $.ajax({ type: "POST", async: true, url: "../Aja ...

  9. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...

随机推荐

  1. oracle 根据字段分组后,将组内的数据根据字段排序

    row_number() over(partition by 分组字段 order by 排序字段 desc)

  2. 3.3 SQLite数据库

    1.使用嵌入式关系型SQLite数据库存储数据 轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用 ...

  3. hdu 4647 - Another Graph Game(思路题)

    摘自题解: 若没有边权,则对点权从大到小排序即可.. 考虑边,将边权拆成两半加到它所关联的两个点的点权中即可. ..因为当两个人分别选择不同的点时,这一权值将互相抵消. 代码如下: #include ...

  4. 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题

    微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...

  5. 了解linux下RAID(磁盘阵列)创建和管理

    现在的操作系统,不论是windows 还是linux都具有raid的功能,RAID 分为硬件 RAID 和软件 RAID, 硬件 RAID 是通过 RAID 卡来实现的,软件RAID是通过软件实现的, ...

  6. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  7. Oracle 删除大表中部分数据

    需求: 项目中有一张表大概有7000多万条数据,造成表空间已满,需要清理部分数据,打算清理3000万. 2B 做法: delete from table_name where ID > '400 ...

  8. [C++] C/C++结构体的区别

    C/C++结构体的区别 >_<:C中的结构体和C++中结构体的不同之处: 在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. >_<: ...

  9. 文件上传小技巧/原生态【html篇】

    引语:大家都知道,html中上传文件就一个input,type=file就搞定了.但是,这个标签的样式,实在不值得提点什么,要改动他的样式,恐怕也是较难的.但是其实挺简单,今天就来说说上传文件小技巧吧 ...

  10. JAVA学习Swing绝对局部简单学习

    package com.swing; import java.awt.Container; import javax.swing.JButton; import javax.swing.JFrame; ...