我在 dragPanelExtender 内的 popupControlExtender 内的更新面板上收到此错误。
我看到很多其他人都有这个问题,并且有各种修复,但没有一个对我有用。
我很想听听为什么会发生这种情况的合乎逻辑的解释,以及将来避免此类问题的万无一失的方法。
我发现像其他人一样,当触发器是 LinkButton 而不是 ImageButton 时不会发生此错误,仍然想知道是否有人有解释。
我在 dragPanelExtender 内的 popupControlExtender 内的更新面板上收到此错误。
我看到很多其他人都有这个问题,并且有各种修复,但没有一个对我有用。
我很想听听为什么会发生这种情况的合乎逻辑的解释,以及将来避免此类问题的万无一失的方法。
我发现像其他人一样,当触发器是 LinkButton 而不是 ImageButton 时不会发生此错误,仍然想知道是否有人有解释。
我遇到了同样的问题,直到我最终找到了完全符合我要求的https://siderite.dev/blog/thispostbacksettingsasync-is-null-or.html之前,我还没有真正找到任何令人满意的解决方案。
只是为了避免将来可能出现死链接的问题,这里是代码:
var script = @"
if (Sys &&
Sys.WebForms && Sys.WebForms.PageRequestManager &&
Sys.WebForms.PageRequestManager.getInstance)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm &&
!prm._postBackSettings)
{
prm._postBackSettings = prm._createPostBackSettings(false, null, null);
}";
ScriptManager.RegisterOnSubmitStatement(
Page,
Page.GetType(),
"FixPopupFormSubmit",
script);
如果在没有设置 _postBackSettings 的情况下提交,它会创建它们,导致空引用异常消失,因为 _postBackSettings.async 然后可用。
希望这可以帮助,
G。
我最好的猜测是 UpdatePanel 无法将自定义“异步”属性正确写入回发请求。这可能是由于阻止了包装它的控件之一(我的直觉是它是 popupControlExtender - 它往往与更新面板有奇怪的行为,因为它旨在管理其中的事件以用于显示/隐藏目的)。
我建议要么删除更新面板并根据您的特定业务需求推出您自己的解决方案,或者实现您自己的弹出脚本(可能更容易编写)。
顺便说一句,对于某些背景,“this._postbackSettings.async”是您的 AJAX.NET 框架,试图确定这是否是异步调用。您可以通过在发送回发之前以编程方式设置它来克服它(捕获回发事件并将该字段添加到回发请求中,如果它尚不存在)。
只是一些想法......我不相信这个有一个“即插即用”的答案!
在 ScriptManager 控件上将“EnablePartialRendering”设置为 false 可防止该错误,但这不是最佳解决方案。取决于您的应用程序,失去部分渲染的好处可能是一件大事。
只是为了记录,我做的和其他看到错误的人不一样。我有一个 PopupControlExtender,其中是一个复选框列表。我添加了一个带有 javascript 方法的“全选”链接,以编程方式全选/取消全选。我没有使用图像按钮。在添加 javascript 之前我没有看到错误,现在即使在删除它之后错误仍然存在。必须有另一个我错过的变化。
我希望这可以帮助别人...
——马特