1

AJAX 呼び出し内のサーバーからアラートを取得したいのですが、何かがクライアントでの起動をUpdate Panelブロックしています。HttpContext.Current.Response.Write

これは非常に単純な aspx 本文の内容です

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <!-- DropDownList doesn't work here -->
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
        <asp:ListItem Value="1">First</asp:ListItem>
        <asp:ListItem Value="2">Second</asp:ListItem>
    </asp:DropDownList>
</div>
</form>

そして、ここで私はVBでそれを処理しています

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) _
        Handles DropDownList1.SelectedIndexChanged
    Dim alertMsg As String
    Dim alertScript As String
    'DO OTHER STUFF HERE
    alertMsg = String.Format("You Selected {0}", DropDownList1.SelectedItem.Text)
    alertScript = String.Format("<script type= text/javascript>alert('{0}');</script>", alertMsg)

    System.Web.HttpContext.Current.Response.Write(alertScript)

End Sub

どちらの場合も vb コードが起動しますが、UpdatePanel の内部ではなく外部で呼び出された場合にのみ、アラート メッセージのスクリプトが作成されます。

私は何を間違っていますか?

4

2 に答える 2

1

updatepanel を使用しているため、 ClientScriptManagerを使用してスクリプトを登録する必要があります。次のコードを試してください。それはうまくいくはずです:

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) _
    Handles DropDownList1.SelectedIndexChanged
    Dim alertMsg As String
    Dim alertScript As String
    'DO OTHER STUFF HERE
    alertMsg = String.Format("You Selected {0}", DropDownList1.SelectedItem.Text)
    alertScript = String.Format("<script type= text/javascript>alert('{0}');</script>", alertMsg)

    'register script on startup
    ClientScriptManager.RegisterStartupScript(Me.[GetType](), "Alert", alertScript);
End Sub
于 2013-05-26T00:26:02.670 に答える
1

System.Web.HttpContext.Current.Response.WriteUpdatePanel 内で機能していません。JavaScript エラーも発生している可能性があります。

その理由は、UpdatePanel がページの一部の xml 構造体で準備され、それを ajax を使用してクライアントに送信するためです -Response.Write反対側から直接ブラウザ ページに書き込もうとします - しかし、ここでは ajax 呼び出しがあります。ページ バッファに直接アクセスすることはできません。

問題を解決するには、UpdatePanel 内でリテラルを使用し、そのリテラルでメッセージをレンダリングします。ただし、スクリプトをレンダリングすることはできず、更新パネルの後に実行することはできません。

更新パネルの後にスクリプトを実行するには、スクリプトを登録します

于 2013-05-24T20:42:30.830 に答える