我正在使用 jQuery UI 从 asp.net 更新我的网站之一以使用母版页。
这是我的原始代码片段,它可以在母版页上工作,但不能在以下情况下工作:
$('#myCancelEventDialog').dialog({
autoOpen: false,
width: 500,
buttons: {
"Cancel This Event": function () { __doPostBack('btnCancel', ''); },
"Do Nothing": function () { $(this).dialog("close"); }
}
});
但是,我看到发生了什么,母版页更改了函数的名称,下面的代码针对此实例修复了它。
$('#myCancelEventDialog').dialog({
autoOpen: false,
width: 500,
buttons: {
"Cancel This Event": function () { __doPostBack('ctl00$ContentPlaceHolder$btnCancel', ''); },
"Do Nothing": function () { $(this).dialog("close"); }
}
});
请注意,我已在 btnCancel 上添加了“ctl00$ContentPlaceHolder$”前缀,以便修复相应的回调函数。
从我在 stackoverflow 上读到的其他线程中,有一个比我在上面所做的一次修补代码更好的解决方案,但还没有完全正确。
当您像上面的示例一样使用母版页时,获取 jQuery UI 回发函数以找到正确的回调函数的通用方法是什么?
最佳答案
快速修复可能是执行以下操作
$('#myCancelEventDialog').dialog({
autoOpen: false,
width: 500,
buttons: {
"Cancel This Event": function () { __doPostBack("'" + $('[id$=btnvalue]')[0].id + "'", ''); },
"Do Nothing": function () { $(this).dialog("close"); }
}
});
这使用了 jQuery endswith选择器,因为母版页现在意味着您的控件 ID 有前缀,但结尾是相同的。只要您没有重复的 id 就可以使用此方法,而这正是 ASP.NET 团队旨在通过为嵌套控件 id 添加前缀来阻止的情况。 这样做的缺点是 jQuery 必须做更多的工作来查找元素,因为它无法使用 native getElementById。
另一个修复方法是升级到 asp.net 4.0,您可以使用 clientidmode 关闭控件的前缀。
关于asp.net - jQuery UI 与 asp.net 母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160521/