【发布时间】:2011-02-15 04:28:04
【问题描述】:
我们目前正在将旧版 web 应用程序的客户端部分从 asp.net ajax 迁移到 jquery/jquery-ui。该应用程序包括(除其他外)一些 asp.net ajax UpdatePanels。
现在我想扔掉所有 __doPostback() 的东西,并与 jQuery 的 $.ajax 对话到 .ascx 控件的“服务器端”。理想情况下,服务器会使用一些可解析的数据结构进行响应,我可以将这些数据结构放入我的 jQuery UI 控件中。
我已经意识到这很难做到,因为 asp.net ajax 客户端/服务器代码相互交织,并且没有公共接口可以挂钩到 ajax 请求或响应。但是,我们不想更改服务器端代码,因为它仍应使用旧的 asp.net 前端运行。
经过一些调整后,我发现我可以挂钩到 ScriptManager 的 beforeRequest 和 endRequest 事件,以获得回发和部分响应的通知。我将这些分发给 jQuery 事件:
var paqeRequestInst = window.Sys.WebForms.PageRequestManager.getInstance();
//bind ASP.NET ScriptManager events to jQuery events
paqeRequestInst._events.addHandler('beforeRequest', function(){
$(window).trigger('beforePanelResponse');
});
paqeRequestInst._events.addHandler('endRequest', function(pageRequestInst, ErrInst){
$(window).trigger('afterPanelResponse', [pageRequestInst, ErrInst]);
});
但是,还有很多问题:
- 拦截 ScriptManager 响应、解析它并将其放入我的 jQuery UI 控件的最佳方法是什么?
- 如何更新通常由 ScriptManager 管理的所有 __VIEWSTATE 内容?
- 对于这种“asp.net ajax 到 jquery”场景,是否有最佳实践/jquery 插件?
【问题讨论】:
-
jquery 带有成功,错误等状态,它会告诉你页面是否成功返回,检查 json,id 说它可能有用。
-
@Val:我非常了解 jQuery,我只是在使用 asp.net ajax 和它更新页面部分的非常尴尬的方式。
-
据我所知(我可能错了),但要触发事件,您必须先注册它或先绑定它。检查取消绑定以及清除任何以前的绑定,
-
我认为您可能想退后一步,评估您前进的道路从长远来看是否是最好的。我认为你最好找到一种方法来修改服务器代码,以便它可以在旧的 updatePanel 内容和来自 jQuery 的真正 AJAX 调用之间共享(这可能只返回你需要的数据)。
标签: jquery asp.net ajax jquery-ui updatepanel