代码之家  ›  专栏  ›  技术社区  ›  E.J. Brennan

带ASP.NET母版页的jQuery UI

  •  1
  • E.J. Brennan  · 技术社区  · 14 年前

    我正在用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 回复  |  直到 11 年前
        1
  •  2
  •   redsquare    14 年前

    一个快速的解决方法是

     $('#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

        2
  •  1
  •   Josh    14 年前

    您将要使用您所追求的控件的clientID:

    __doPostBack('<%= btnCancel.ClientID %>', '');
    

    但是,如果使用此技术,则必须将脚本块包含在通过runat属性向ASP.NET运行时公开的DIV中。

    <div runat="server">
        <script type="text/javascript" language="javascript">
            //Your Script Here
        </script>
    </div>
    
        3
  •  0
  •   c-sharp    11 年前