onClientClick调用Javascript函数,无法传递参数

时间:2013-08-15 14:58:37

标签: javascript ajax vb.net panels onclientclick

我目前正在使用ASP.NET中的Ajax Tabs控件开发一个项目。我这个项目的语言是VB.NET。我正在尝试利用选项卡上的“OnClientClick”事件。我正在使用数据库中的数据填充选项卡,我正在使用VB函数来实际创建选项卡。 VB代码如下:

Protected Sub makeTab(ByVal categoryName As String, ByVal categoryId As String)

            Dim label As New Label
            label.Text = categoryName
            Dim tab As New AjaxControlToolkit.TabPanel
            tab.Controls.Add(label)
            tab.HeaderText = categoryName
            tab.OnClientClick = "display_alert(" + categoryId + ")"

            tcResultSet.Tabs.Add(tab)
            'Next
            For x As Integer = 1 To tcResultSet.Tabs.Count
                If tcResultSet.Tabs(tcResultSet.Tabs.Count - x).HeaderText = "Tab0" Then tcResultSet.Tabs.RemoveAt(tcResultSet.Tabs.Count - x)
            Next


        End Sub

为数据库返回的每条记录调用此函数。

在ASPX页面中,选项卡容器为:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" />
                            <asp:TabContainer ID="tcResultSet" runat="server" AutoPostBack="true" ScrollBars="auto" >
                                <asp:TabPanel ID="tbTab0" runat="server" HeaderText="Tab0" />
                            </asp:TabContainer>

我的javascript函数是:

<script type="text/javascript" >
    function display_alert(categoryNumber) {
        window.alert("Hello! You clicked a tab");
    }
</script>

它被放置在我页面顶部的页面顶部。正如你所看到的,我目前甚至没有在我的Javascript函数中使用我的变量,但我会。目前,此代码不起作用。它可以工作,如果我从Javascript函数定义中删除变量,如果我调用我的Javascript函数(从我的VB)像“display_alert”。如果我在函数名后包含“()”,它将无法工作。有没有办法解决?有什么方法可以使它正常工作吗?

2 个答案:

答案 0 :(得分:0)

我认为此应用程序的客户规范需要AJAX选项卡,在与他们交谈后,他们对其他选项持开放态度。现在,我正在动态创建HTML按钮,并且能够无问题地调用我的Javascript。问题解决了。

答案 1 :(得分:0)

附加到OnClientClick的事件处理程序不能有参数。为了使其正常工作,您需要将代码包装在一个函数中,例如在Javascript中将是

tab.OnClientClick = function () {alert('my message here');}

这也适用于标记,例如

<asp:TabPanel ID="myTab" runat="server" OnClientClick="function (){alert('this works');}">

认为与事件处理程序的签名有关。分配给OnClientClick时,您的事件处理程序将被标记到“引擎盖下”已存在的事件处理程序中 - 如果它们没有相同的签名,您将获得运行时错误。