我正在使用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回发函数找到正确的回调函数的通用方法是什么,如上例所示?
答案 0 :(得分:2)
快速解决方法可能是执行以下操作
$('#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必须做更多的工作才能找到元素,因为它不能使用原生的getElementById。
另一个解决方法是升级到asp.net 4.0,你可以使用clientidmode
来转换控件的前缀答案 1 :(得分:1)
您需要使用您所使用的控件的ClientID:
__doPostBack('<%= btnCancel.ClientID %>', '');
但是,如果使用此技术,则必须将脚本块包含在通过runat属性向ASP.Net运行时公开的div中。
<div runat="server">
<script type="text/javascript" language="javascript">
//Your Script Here
</script>
</div>
答案 2 :(得分:0)