gpt4 book ai didi

Jquery + ASP.NET 更新面板

转载 作者:行者123 更新时间:2023-12-01 01:28:44 25 4
gpt4 key购买 nike

我在工作中一直忙于在整个自定义 CRM 中实现 JQuery。在这个过程中,我创建了一个带边框的面板,它的标题中有一个简单的按钮,可以根据当前状态折叠或展开内容。现在,为了记住面板的状态,我正在使用 jquery cookie 库,当提交页面时,该库会为该控件设置一个 cookie,然后当重新加载页面时,它会读取面板并将其重置为最后的状态。

问题一是让 JQuery 在提交页面时执行,因为 ASP.NET 接管了这个任务并且不会调用表单上的 Submit() 函数。为了克服这个问题,我找到了http://kenbrowning.blogspot.com/2009/01/supporting-jquerys-formsubmit-in-aspnet.html这看起来几乎完美地工作。

但是...经过进一步测试,我发现这将阻止任何本应在 UpdatePanel 内发生的回发,以执行完整的回发,而不是从面板进行异步回发。我意识到 UpdatePanel 现在有点过时了,但它们散布在我们的网站中,因此为了使用此控件,它必须与它们很好地配合。

那么,是否有办法确定是否发生了异步回发?基本上我希望能够做这样的事情:

if (IsAsyncPostback) {
theForm.submit(); //this seems to still fire the async postback, but doesn't call the jquery which is setup to save the state..
} else {
$(theForm).submit(); //this is from the link, which cause all postbacks to be full on postbacks, even if they are in an updatepanel
}

救命,我四处搜寻,没能找到任何有用的东西。我确定我不能是唯一尝试过此操作的人吗?

最佳答案

我会避免干扰 __doPostBack() 函数。

我认为您想要的是处理 PageRequestManager 的 beginRequestendRequest 事件。这将在每次 UpdatePanel 刷新后运行您的代码,例如:

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
if ($('#panelID').is(':hidden'))
$.cookie('#panelID', 'true');
else
$.cookie('#panelID', 'false');
});
<小时/>

如果您确实想更改__doPostBack(),最好使用这种方法:

var oldDoPostBack = window.__doPostBack;

window.__doPostBack = function(target, arg) {
// Trigger a custom event, to track when this occurs.
$(window).trigger('doPostBack');

// Call the real __doPostBack() function;
oldDoPostBack(target, arg);
}

然后,您可以绑定(bind)到该自定义事件,以便在从任何源触发 __doPostBack() 时采取操作:

$(window).bind('doPostBack', function() {
alert('__doPostBack is about to execute.');
});

这里的重要优点是您无需重新定义 __doPostBack(),因此破坏它的可能性较小。

不过,我建议坚持使用内置的 PageRequestManager 事件,除非您确实因其他原因确实需要捕获 __doPostBack() 事件。

关于Jquery + ASP.NET 更新面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6093735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com