代码之家  ›  专栏  ›  技术社区  ›  user48408

Sys.invalidoOperationException:处理程序必须是函数

  •  3
  • user48408  · 技术社区  · 15 年前

    我有一个包含TabContainer的网页

    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    ...
    ....
    <form id="form1" runat="server">
        <asp:ScriptManager ID="sm1" runat="server"></asp:ScriptManager>
        <cc1:TabContainer runat="server" ID="tbcTabContainer" OnClientActiveTabChanged="ChangeTab()"></cc1:TabContainer>
    </form>
    

    <script  type="text/javascript">
    function ChangeTab()
    {
        alert('Sucesss');
    }
    </script>
    

    在代码背后的页面加载中,我创建了两个选项卡面板,并将它们添加到容器中。现在,我的问题是,当我更改选项卡时,javascript警报框会显示出来,但一旦我关闭它,就会出现错误

    2 回复  |  直到 15 年前
        1
  •  8
  •   Quintin Robinson    15 年前

    您需要从属性中删除参数。。。

    改变

    OnClientActiveTabChanged="ChangeTab()"
    

    OnClientActiveTabChanged="ChangeTab"
    

    只是为了澄清一下,当您添加paren时,它是一个文本方法调用,而没有paren时,它是对方法的引用,这些赋值的工作方式类似于需要委托(方法引用)的回调。相反,它正在获取方法调用,并将在原始eval时执行(因为它是一个调用),然后在尝试正确调用时失败,因为它不是实际的方法引用。

        2
  •  1
  •   nhaarman    15 年前

    此外,函数在技术上应该实现适当的签名,这类似于服务器端事件处理程序: