3

我有一个包含 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:处理程序必须是函数。

4

2 回答 2

8

您需要从属性中删除括号...

改变

OnClientActiveTabChanged="ChangeTab()"

OnClientActiveTabChanged="ChangeTab"

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

于 2009-03-30T16:07:06.763 回答
1

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

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

于 2009-03-30T16:09:19.440 回答