用户操作
[即时聊天] [发私信] [加为好友]
david 董ID:dotnetWalker
50299次访问,排名2149好友0人,关注者7
台湾微软MVP
dotnetWalker的文章
原创 45 篇
翻译 0 篇
转载 0 篇
评论 51 篇
dotnetWalker的公告

董大伟,微软TechED 2007 讲师,台湾微软MSDN讲座专属讲师,微软最有价值专家(MVP),台湾清华大学自强基金会教育训练中心顾问讲师,Run!PC专栏作者,博硕文化、旗标出版作者,.NET 书籍畅销作者,台湾多家企业、机构之软件技术顾问、教育训练讲师
最近评论
smoily:7下不来了吗?
shijie1983:提供Google排名优化百度排名竞价雅虎排名推广正好学习一下
xqxujun:Silverlight是什么,晕 亚。。。
iChov:MS也搞出这么复杂的东西。。。
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 ASP.NET 2.0当中的Call Back机制收藏

    新一篇: 2007软件开发2.0大会课程之一:ASP.NET AJAX 与 Silverlight 的完美结合 | 旧一篇: ASP.NET AJAX中的非同步PageMethod调用




    连续几篇介绍ASP.NET当中的AJAX实现方式,主要的目的也是让读者可以有所比较,理解这几种作法之间的差异。

    最后一个要介绍的,当然就是ASP.NET当中的Call Back机制。Call Back是ASP.NET 2.0当中内建的功能,不需要安装ASP.NET AJAX依旧可以相当有效率的呈现出AJAX效果。

    我们看下面的页面,我们在页面上放置另一个TextBox2和HtmlButton(ID为CallBackButton,并设为在服务器端运行:


    接着我们键入下面的代码:


    我们先看运行的结果,您会发现,单击下方的HtmlButton,则网页不需要postback,TextBox2里面的Server端时间已经更新了:

    怎么完成的呢?
    这段代码必须好好解释一下,首先代码第三行有一个很不一样的地方:

    0001:Partial Class _Default
    0002: Inherits System.Web.UI.Page
    0003: Implements System.Web.UI.ICallbackEventHandler

    这表示这张.aspx网页支援Call Back机制(我们待会再来解释Call Back机制)。而因为网页支援Call Back机制,因此必须实现下面两个项目:


    我们看先前的Form_Load代码:


    请特别注意21-25行代码,23行的“GetCallbackEventReference”指令,建立了CallBack机制(ASP.NET 2.0会自动产生一段JavaScipt的CallBack代码),在第25行我们将此机制(JavaScript)挂到HtmlButon上。

    Call Back的整个原理是:
    1.在ASP.NET代码中,利用“GetCallbackEventReference”产生一段JavaScript的Call Back指令。
    2.将这段Call Back指令挂到某个Html控件上,利用这段JavaScript指令在不postback的情况下,将数据(参数)回传到Server(参数包含下表中定义的argument, clientCallbackProc…) 。
    3.Server端(.aspx.vb程式)接收到数据(参数)后进行处理,处理完后回呼(Call Back)Client端的JavaScript。
    4.Client端的JavaScript函数,收到回呼的结果,动态更新网页内容。
    就这样,不换页的情况下,我们就可以完成网页更新的效果。

    我们回顾整个Call Back机制的流程,从开发人员的角度,看整个Call Back机制的运作方式:


    您会发现分为下面几个步骤:
    ※步骤A:Client端启动Call Back机制。启动的方式是利用GetCallbackEventReference所建立的WebForm_DoCallback函数(JavaScript)。
    ※ 步骤B:Server端的RaiseCallbackEvent接收到Client端传入的参数,开始运作,这时多半处理一些数据库IO,更新Server端的状态。
    ※步骤C:GetCallbackResult被调用,这时候多半用来建立要回传给Client端的HTML码,例如一张表格,或是一段文字。
    ※ 步骤D:Client端接收到从GetCallbackResult传来的值(多半是刚才Build出来的HTML码),Client端的 ReceivedData函数是我们自己在Page_Load里面以RegisterStartupScript建立的,可以通过这个函数将接到的 HTML以JavaScript塞入页面中。

    整个进程就完成了一个Call Back动作,可以达到不用换页(Postback)就更新页面的效果。 

    发表于 @ 2007年11月14日 09:53:00|评论(loading...)|编辑

    新一篇: 2007软件开发2.0大会课程之一:ASP.NET AJAX 与 Silverlight 的完美结合 | 旧一篇: ASP.NET AJAX中的非同步PageMethod调用

    评论

    #suwenkkk 发表于2007-11-15 09:33:43  IP: 123.191.234.*
    有例子代码么!
    #stevencsy 发表于2007-11-16 11:59:41  IP: 58.33.171.*
    看不太懂
    #dotnetWalker 发表于2007-11-19 02:27:12  IP: 210.68.1.*
    撰寫了CS和VB代碼,請參考。
    http://video.studyhost.com/Download/Example/ASP.NET/CallBackExamples.rar
    #mengyexue 发表于2007-11-19 11:56:34  IP: 219.134.89.*
    有个问题,在这里问不知道合不合适,我的问题是:使用vs2005自带treeview控件的时候,在点击无连接菜单的时候treeview不会自动展开它的下级菜单而是刷新了整个页面,这个让人感觉很不自在,不知道您使用vs2005自带treeview控件的情况是不是也是这样,在vs2003使用treeview控件就挺好,点击无连接菜单可以展开下级菜单也无刷新,不知道这个问题能不能解决!! 谢谢!
    #mengyexue 发表于2007-11-20 10:25:15  IP: 219.134.89.*
    问题解决了!
    #11 发表于2008-01-31 17:20:39  IP: 211.144.196.*
    看了例子就清楚很多了,不错!
    #lyfdjh 发表于2008-02-04 22:11:01  IP: 58.17.10.*
    看了你的很多例子 我是个初学者 问个silverlight简单的问题:
    你例子中创建了ajax网站后 然后拖拽一个xmal的控件 那个控件为什么我的vs2005中没有,是不是要装什么东西啊?谢谢
    #shenkei 发表于2008-03-26 16:45:39  IP: 116.52.154.*
    你的treeview是怎么解决的???
    #df 发表于2008-04-29 16:27:25  IP: 218.0.244.*

    塑料模具
    艺术漆
    健康管理
    木门
    木门
    波纹管
    波纹管
    松香树脂
    缝纫机压脚
    潜水衣
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © dotnetWalker