0

現在、ASP.NET で Ajax タブ コントロールを使用するプロジェクトに取り組んでいます。このプロジェクトの私の言語は 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 関数定義から変数を削除し、「display_alert」のように (VB から) Javascript 関数を呼び出すと機能します。関数名の後に「()」を入れるとうまくいきません。これを回避する方法はありますか?これを適切に機能させる方法はありますか?

4

2 に答える 2

0

OnClientClick にアタッチされたイベント ハンドラーには、パラメーターを指定できません。これを適切に機能させるには、コードを関数でラップする必要があります。たとえば、Javascript では次のようになります。

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

これはマークアップでも機能します。

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

イベントハンドラーの署名に関係していると思います。イベント ハンドラーに割り当てるとOnClientClick、「ボンネットの下」の既存のイベント ハンドラーにタグ付けされます。同じ署名がない場合は、実行時エラーが発生します。

于 2013-10-15T15:02:33.637 に答える