0

私はいたるところを見てきましたが、解決策が見つかりませんでした。あなたが助けてくれることを願っています:

VB.NET で記述され、Framework 2.0 で実行される Web サイトを維持しています。

私のページの 1 つで、UpdatePanel 内にドロップダウン コントロールがあります。

<asp:UpdatePanel ID="pnlDropDown" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
        <ContentTemplate>
            <asp:DropDownList ID="ddlTest" runat="server" Width="400"
                OnSelectedIndexChanged="ddlTest_SelectedIndexChanged" AutoPostBack="true">
                <asp:ListItem Text="--- Please Select ---" Selected="True"></asp:ListItem>
                <asp:ListItem Text="111"></asp:ListItem>
                <asp:ListItem Text="222"></asp:ListItem>
                <asp:ListItem Text="333"></asp:ListItem>
            </asp:DropDownList>
        </ContentTemplate>
    </asp:UpdatePanel>

このコントロールのハンドラー内で、ScriptManager.RegisterStartupScript を呼び出します。

Protected Sub ddlTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    ScriptManager.RegisterStartupScript(Me, GetType(Page), "Test", "alert('Test'); ", True)
End Sub    

ここに私の問題があります:ドロップダウンから値を選択すると、「RegisterStartupScript」メソッドは機能しませんが、プロジェクトが IIS 6 および Framework 2.0 で実行されている場合にのみ発生します。- IIS 7 で実行するように変更すると、完全に動作します。- Framework 4.0 で実行するように変更すると、完全に動作します。- UpdatePanel 部分を削除すると、機能します。

しかし、私が何も変えなければ、それは何もしません。

jquery と ajax で動作するようにコード全体を変更する前に解決策はありますか? :)

ありがとう、

オリット。

4

1 に答える 1

0

RegisterStartupScript の使用を避けるために見つけた回避策を次に示します。シンプルで完璧に機能します:

  1. 「hdnTest」という名前の UpdatePanel 内に隠しフィールドを追加しました。

    <asp:UpdatePanel ID="pnlDropDown" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:HiddenField ID="hdnTest" runat="server" />
        <asp:DropDownList ID="ddlTest" runat="server" Width="400"
            OnSelectedIndexChanged="ddlTest_SelectedIndexChanged" AutoPostBack="true">
            <asp:ListItem Text="--- Please Select ---" Selected="True"></asp:ListItem>
            <asp:ListItem Text="111"></asp:ListItem>
            <asp:ListItem Text="222"></asp:ListItem>
            <asp:ListItem Text="333"></asp:ListItem>
        </asp:DropDownList>
    </ContentTemplate>
    

  2. サーバー側では、コントロールのハンドラー内の非表示フィールドに値を挿入しました。

    Protected Sub ddlTest_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If x Then
            hdnTest.Value = "true"
        Else
            hdnTest.Value = "false"
        End If
        pnlDropDown.Update()
    End Sub 
    
  3. クライアント側では、隠しフィールドの値を取得し、それに応じて動作する pageLoad() 関数を追加しました。

     function pageLoad(){            
        if ($("#hdnTest").val() == "true") 
            alert('true');             
        else
            alert('false');               
     }
    

うまく機能します。

オリット。

于 2013-06-20T07:44:06.573 に答える