gpt4 book ai didi

asp.net - UpdatePanel 和 ClientIDMode ="Static"的可能解决方案

转载 作者:行者123 更新时间:2023-12-03 09:30:21 26 4
gpt4 key购买 nike

我一直在到处寻找 Asp.NET 中静态 ClientIDMode + UpdatePanel 的解决方案,如 http://connect.microsoft.com/VisualStudio/feedback/details/584991/clientidmode-static-in-updatepanel-fails-to-do-async-postback 所示。

问题出在 Sys.WebForms.PageRequestManager.uniqueIDToClientID 函数中,该函数通过将“$”字符替换为“”来将名称转换为 id。
我做了一个似乎有效的修复,但我希望你们告诉我你的想法以及我是否遗漏了什么。非常感谢!

var old_uniqueIDToClientID = Sys.WebForms.PageRequestManager.prototype._uniqueIDToClientID;
Sys.WebForms.PageRequestManager.prototype._uniqueIDToClientID = function (arg) {
var element = this._form.elements[arg];
return (element) ? element.id : old_uniqueIDToClientID(arg)
}

最佳答案

我们进行了类似的修复,但我们更改了另一个涉及搜索导致回发的元素的函数。

我们已将以下代码放置在母版页的底部,以确保在脚本管理器加载其脚本后包含该代码。从本质上讲,它会不断修改 id,直到找到导致回发的元素。原始代码通过从由美元符号分隔的名称右侧删除标记来搜索元素。所以“$ctl00$ddl001”会变成“$ctl00”。如果您使用的是静态 ID,那么该后缀可能永远不会存在。我们将函数修改为从左侧开始并删除容器名称,直到找到一个元素。

它现在似乎对我们有用。 :)

   if (Sys.WebForms.PageRequestManager) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm._findNearestElement = function (uniqueID) {
while (uniqueID.length > 0) {
var clientID = this._uniqueIDToClientID(uniqueID);
var element = document.getElementById(clientID);
if (element) {
return element;
}
var indexOfFirstDollar = uniqueID.indexOf('$', 1);
if (indexOfFirstDollar === -1) {
return null;
}
uniqueID = uniqueID.substring(indexOfFirstDollar + 1, uniqueID.length);
}
return null;
};
}

关于asp.net - UpdatePanel 和 ClientIDMode ="Static"的可能解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13744513/

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