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

时间:2009-03-30 16:03:13

标签: c# .net javascript 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>

调用js函数,此时此函数无效。

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

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

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

2 个答案:

答案 0 :(得分:8)

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

更改

OnClientActiveTabChanged="ChangeTab()"

OnClientActiveTabChanged="ChangeTab"

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

答案 1 :(得分:1)

通常,您只需提供要调用的函数名称,因此“ChangeTab()”实际上应该只是“ChangeTab”。

此外,该函数应该在技术上实现正确的签名,这类似于服务器端事件处理程序: ChangeTab(发件人,e)......