假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...
asp.net Ajax 终极解决方案
查看( 94 ) /
评论( 2 )
ajax 在目前 web 领域已广泛应用,其真正核心只不过是一个封装好了的 js 库。最五花八门的莫过于 asp.net 的控件,我个人认为 ajax 只是一个轻量级的东西,根本没有必要将它写成服务器组件,如 ajax.net、AjaxControlToolkit 等。所以我一直视这些组件为垃圾。。。
a1r&]r*]k0 ITPUB个人空间 gx sl_3J
以下说明我为什么不认同 ajax 的相关组件:
*w8Cs\_9o vPe(vC0 ITPUB个人空间 wF Wp9u\7K#^)K9C
1、将 ajax 封装得太死,出现问题难于调试;
IW_X~G0 2、组件过于臃肿,太多没有用的功能;ITPUB个人空间 \o0t4f~3o Q7U!|
3、依赖性太强,少一样不可,如 webform;ITPUB个人空间KpP|*e\
ITPUB个人空间\~s(K9tm^
传统的 ajax 应用到项目中,会出现由于项目的 ajax 应用太多,服务端的 ajax 响应函数难于管理,我们到底要把这些响应函数部署在什么位置?ITPUB个人空间bx4u gV)M
ITPUB个人空间+\ wh N ~MT!P
假如ITPUB个人空间(y.j2x+D@)hh
index.aspx 里有三个 ajax 响应函数,我们可以把这三个响应函数放在 index.aspx 中,并于 Page_Load 事件中根据参数不同来调用这些函数。ITPUB个人空间M a,o7u H5x9ZA \
index.aspx 里还使用了 abc.ascx,这个控件里面也用到了 ajax,那么 abc.ascx 里的响应函数又应该放在哪里?index.aspx 中吗?如果 index2.aspx 中也用到了 abc.ascx,难道还要复制 index.aspx 的处理函数到 index2.aspx,这样肯定不行;
R,C7h"tRaQ:L*Q0 我们可以新建一个 ajax.aspx 来处理所有的 ajax 响应,php/asp 都可以这样做。这样管理还是不理想,
/P l4O)r/mYp0 最理想的管理方法应该是页面、控件与响应函数集成。ICallBackEventHandler 可以做到,但是它依赖 webform,假如你的页面中没有一个 <form runat="server">,则会失效。
5A|c,ZIU e;G P0 问题回归到如体使用轻量级 ajax,并实现页面/控件与 ajax 响应函数集成。ITPUB个人空间9H5AU+C+k{(`
ITPUB个人空间1X vEb,B [.J0H!I
Reflector 查看 System.Web.UI.Page 里面处理 ICallBackEventHandler 模块后,我们可以这样做:ITPUB个人空间'aTY_9aF_%u
ITPUB个人空间W+A#P9E"P!mKV Y
1、所有页面继承 BasePage;ITPUB个人空间M1N1\.TPEK%o+d,m4t$[
2、BasePage 继承 System.Web.UI.Page,重写 BasePage.OnLoad;
6j_*Q)q,N#H:~)MEH0 3、实现 AjaxHandlerITPUB个人空间R]1s1jF xe/|
4、添加 Ajax 类,实现 Ajax.Register 静态方法
q.}.oU{;^0 ITPUB个人空间hfQ]_c,H B0M
代码如下:ITPUB个人空间hNIy:n8bN
public class BasePage : Page {ITPUB个人空间:o+H ]2[.Z t`8]
protected override void OnLoad(EventArgs e) {ITPUB个人空间 Qocz%pKF
AjaxHandler();
F ESQ1uPx6E~ ~0 base.OnLoad(e);
/C)^9~R\ Tb0 }
,G!L*S5K/U/| m:h0 ITPUB个人空间RQI5[%Bh c!F9]
ajax handler#region ajax handlerITPUB个人空间f_)] i!Y
//我喜欢用 json 格式数据来返回给客户端处理
y4im/r"o0 protected void AjaxHandler() {
G7WC$y_[&p0 string ajax_target = Request.Form["ajax_target"];
a1r&]r*]k0 ITPUB个人空间 gx sl_3J
以下说明我为什么不认同 ajax 的相关组件:
*w8Cs\_9o vPe(vC0 ITPUB个人空间 wF Wp9u\7K#^)K9C
1、将 ajax 封装得太死,出现问题难于调试;
IW_X~G0 2、组件过于臃肿,太多没有用的功能;ITPUB个人空间 \o0t4f~3o Q7U!|
3、依赖性太强,少一样不可,如 webform;ITPUB个人空间KpP|*e\
ITPUB个人空间\~s(K9tm^
传统的 ajax 应用到项目中,会出现由于项目的 ajax 应用太多,服务端的 ajax 响应函数难于管理,我们到底要把这些响应函数部署在什么位置?ITPUB个人空间bx4u gV)M
ITPUB个人空间+\ wh N ~MT!P
假如ITPUB个人空间(y.j2x+D@)hh
index.aspx 里有三个 ajax 响应函数,我们可以把这三个响应函数放在 index.aspx 中,并于 Page_Load 事件中根据参数不同来调用这些函数。ITPUB个人空间M a,o7u H5x9ZA \
index.aspx 里还使用了 abc.ascx,这个控件里面也用到了 ajax,那么 abc.ascx 里的响应函数又应该放在哪里?index.aspx 中吗?如果 index2.aspx 中也用到了 abc.ascx,难道还要复制 index.aspx 的处理函数到 index2.aspx,这样肯定不行;
R,C7h"tRaQ:L*Q0 我们可以新建一个 ajax.aspx 来处理所有的 ajax 响应,php/asp 都可以这样做。这样管理还是不理想,
/P l4O)r/mYp0 最理想的管理方法应该是页面、控件与响应函数集成。ICallBackEventHandler 可以做到,但是它依赖 webform,假如你的页面中没有一个 <form runat="server">,则会失效。
5A|c,ZIU e;G P0 问题回归到如体使用轻量级 ajax,并实现页面/控件与 ajax 响应函数集成。ITPUB个人空间9H5AU+C+k{(`
ITPUB个人空间1X vEb,B [.J0H!I
Reflector 查看 System.Web.UI.Page 里面处理 ICallBackEventHandler 模块后,我们可以这样做:ITPUB个人空间'aTY_9aF_%u
ITPUB个人空间W+A#P9E"P!mKV Y
1、所有页面继承 BasePage;ITPUB个人空间M1N1\.TPEK%o+d,m4t$[
2、BasePage 继承 System.Web.UI.Page,重写 BasePage.OnLoad;
6j_*Q)q,N#H:~)MEH0 3、实现 AjaxHandlerITPUB个人空间R]1s1jF xe/|
4、添加 Ajax 类,实现 Ajax.Register 静态方法
q.}.oU{;^0 ITPUB个人空间hfQ]_c,H B0M
代码如下:ITPUB个人空间hNIy:n8bN
public class BasePage : Page {ITPUB个人空间:o+H ]2[.Z t`8]
protected override void OnLoad(EventArgs e) {ITPUB个人空间 Qocz%pKF
AjaxHandler();
F ESQ1uPx6E~ ~0 base.OnLoad(e);
/C)^9~R\ Tb0 }
,G!L*S5K/U/| m:h0 ITPUB个人空间RQI5[%Bh c!F9]
ajax handler#region ajax handlerITPUB个人空间f_)] i!Y
//我喜欢用 json 格式数据来返回给客户端处理
y4im/r"o0 protected void AjaxHandler() {
G7WC$y_[&p0 string ajax_target = Request.Form["ajax_target"];