使用asp.net Master Page的jQuery UI

时间:2010-07-01 18:16:33

标签: asp.net jquery jquery-ui master-pages

我正在使用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回发函数找到正确的回调函数的通用方法是什么,如上例所示?

3 个答案:

答案 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)