实现ASP.NET 2.0无刷新页面更方便的方法

“无刷新页面”,只是一种不确切的效果描述(其实还有其他各种方法来实现这个效果),更确切的说法是:在页面上用JavaScript调用服务器端的一个方法,然后处理返回的数据。实现它最标准的方法当然是XMLHTTP。但是,程序员都是懒惰的家伙,每个人都希望能有更方便的方法,或者,更佳的包装。比如,Lostinet的Rane就是对XMLHTTP的一个很好的包装。

终于,在ASP.NET 2.0里面,我们可以轻松的来做到这点了。服务器端任何实现了System.Web.UI.ICallbackEventHandler接口的控件,都可以通过RaiseCallbackEvent()方法来处理从页面上的JS脚本传递过来的请求和数据,处理后,再将结果传回给页面。这项能力的底层仍然是XMLHTTP。

下面是一个简单的演示:

在页面上,我们放上两个文本框和一个按钮:

<INPUT id="txtMessage">
<INPUT onclick="callToServer();" type="button" value="Call to Server">
Result : <INPUT id="txtResult" >

当点击按钮的时候,将调用JS脚本方法callToServer(),JS脚本如下:

 function callToServer()
 {
  var param = document.getElementById("txtUsername").value;
  var context = "";
  <% = ClientScript %>
 }
 
 function handleResultFromServer(result, context)
 {
  document.getElementById("txtResult").value = result;
 }

handleResultFromServer()方法则负责将从服务器传回的数据写到txtResult这个文本框里面。

再看看服务器端的代码:

 public partial class Default_aspx : System.Web.UI.ICallbackEventHandler
 {
  private String ClientScript
  {
  get
  {
  return this.GetCallbackEventReference(this, "param", "handleResultFromServer", "context");
  }
  }
 
  public string RaiseCallbackEvent(string eventArgument)
  {
  return "客户端在[" + DateTime.Now.ToString() + "]传送来 [" + eventArgument + "].";
  }
 }

我们让页面直接实现ICallbackEventHandler接口,然后接口定义的RaiseCallbackEvent()方法中将服务器的时间和传来的数据一起返回回去。

ClientScript属性的作用是,它调用了页面的GetCallbackEventReference()方法,获得了让客户端有能力调用服务器端方法的JS脚本,并输出到页面的callToServer()方法中,这样,点击页面按钮时,就开始执行页面上包含了调用服务器方法的的callToServer()方法。

注意GetCallbackEventReference()方法的参数,在参数中,我们定义了客户端的哪个变量包含了要传递给服务器,服务器方法执行后,调用客户端的哪个方法等信息。GetCallbackEventReference()的详细参看请看这里。

时间: 2024-10-30 00:01:22

实现ASP.NET 2.0无刷新页面更方便的方法的相关文章

[转贴]ASP.NET 2.0无刷新页面新境界

"无刷新页面",只是一种不确切的效果描述(其实还有其他各种方法来实现这个效果),更确切的说法是:在页面上用javascript调用服务器端的一个方法,然后处理返回的数据.实现它最标准的方法当然是XMLHTTP.但是,程序员都是懒惰的家伙,每个人都希望能有更方便的方法,或者,更佳的包装.比如,Lostinet的Rane就是对XMLHTTP的一个很好的包装.    终于,在ASP.NET 2.0里面,我们可以轻松的来做到这点了.服务器端任何实现了System.Web.UI.ICallbac

ajax-Jquery Mobile Ajax ASP.NET控件 无刷新页面查询,添加,修改,删除

问题描述 Jquery Mobile Ajax ASP.NET控件 无刷新页面查询,添加,修改,删除 Jquery Mobile Ajax 技术用ASP.NET控件怎么实现无刷新页面查询,添加,修改,删除功能? 现在刷新一次才能执行JavaScript代码,否则没反应,有时候样式也没了. 我写的代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs&q

Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现_实用技巧

兼容性想还不错:FF,CH,IE,猎豹,都是可以实现的.如果看到回显.当然就是成功了. 经历了好几天的不停的钻牛角尖,终于将这个二货弄出来了.真是煞费苦心啊.但是做出来的瞬间还是蛮开心的. 第一步:我们需要加载几个JS库.jquery库.jquery.form.js库. 下载这两个库,并引用到页面中. 以下为页面中 JS 代码: 复制代码 代码如下:   function upload() {            var options = {                type: "PO

ASP.NET 2.0,无刷新页面新境界

asp.net|刷新|无刷新|页面     本文由KanyBoy授权www.ASPCOOl.com发表.      "无刷新页面",只是一种不确切的效果描述(其实还有其他各种方法来实现这个效果),更确切的说法是:在页面上用JavaScript调用服务器端的一个方法,然后处理返回的数据.实现它最标准的方法当然是XMLHTTP.但是,程序员都是懒惰的家伙,每个人都希望能有更方便的方法,或者,更佳的包装.比如,Lostinet的Rane就是对XMLHTTP的一个很好的包装.      终于,

ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充)

asp.net|示例|刷新|无刷新|页面 原文请见Leon.Zhou的:http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html 下载了示例代码,并转换成VB了,AJAX功能测试成功.但遇到些小问题:Demo1很正常.Demo2按Leon原来的写法testAJAX.aspx.vb中Line 22不成功.所以我直接在IDE环境中,修改button3的OnClientClick属性,见testAJAX.asp的Line 52.测试成功.Demo

“ASP.NET 2.0 正式版中无刷新页面的开发”中示例代码与Firefox兼容的解决

asp.net|解决|示例|刷新|无刷新|页面 这几天正着手开始写毕业设计,因为发生了一些事情,所以一直拖到现在才开始.其实我准备做一个ASP.NET 2.0并且使用AJAX的Web项目,于是到博客园到处寻着AJAX的文章,恰好翻到了Leon.Zhou的ASP.NET 2.0 正式版中无刷新页面的开发按照代码示例和讲解做了一个页面,确实不错啊.因为俺平时几乎都用Firefox,所以就顺手测试了一下Firefox下的效果,结果发现点了Button之后没有反应--于是打开Javascript控制台,

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

刷新|无刷新|页面 在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动.而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人了解,甚至不少人认为该功能有些"鸡肋".但如果我们仅仅是在程序中加入很少部分的 Ajax 特性, Atlas . Ajax.Net 等就显得有些"杀鸡用牛刀"的感觉了.而且,我认为使用 ASP.NET2.0 提供的方法进行开发并不很复杂,相反,使用很

ASP.NET 2.0的异步页面刷新

asp.net|刷新|页面|异步 ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了. 我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作:其次为了拿到socket服务返回的长度不定.有可能很大的Response数据,我不得不采用了dotNET的IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags,

ASP.NET 2.0的异步页面刷新真给劲

asp.net|刷新|页面|异步 ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了. 我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作:其次为了拿到socket服务返回的长度不定.有可能很大的Response数据,我不得不采用了dotNET的IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags,