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

use*_*408 3 .net javascript c# tabs ajaxcontroltoolkit

我有一个包含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>
Run Code Online (Sandbox Code Playgroud)

它调用了一个js函数,此时此功能无效.

<script  type="text/javascript">
function ChangeTab()
{
    alert('Sucesss');
}
</script>
Run Code Online (Sandbox Code Playgroud)

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

Microsoft JScript运行时错误:Sys.InvalidOperationException:处理程序必须是函数.

Qui*_*son 8

你需要从属性中删除parens ...

更改

OnClientActiveTabChanged="ChangeTab()"
Run Code Online (Sandbox Code Playgroud)

OnClientActiveTabChanged="ChangeTab"
Run Code Online (Sandbox Code Playgroud)

只是为了澄清当你添加parens时它是一个文字方法调用,而没有parens它是对方法的引用,这些赋值就像期望委托的回调一样(方法引用).相反,它正在获取方法调用并将在原始eval上执行(因为它是一个调用),然后在尝试正确调用时失败,因为它是一个实际的方法引用.