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

System.Web.HttpContext.Current.Response.WriteUpdatePanel 中不起作用,也许您也有 javascript 错误。

原因是 UpdatePanel 是在 xml 结构上准备页面的一部分,并使用 ajax 将其发送给客户端 -Response.Write另一方是直接尝试在浏览器页面上写入 - 但是这里我们有 ajax 调用,我们不能直接访问页面缓冲区。

要解决您的问题,请在 UpdatePanel 中使用 Literal,并在该 Literal 上呈现您的消息 - 但同样,您无法呈现脚本并期望在更新面板之后运行。

要使您的脚本在更新面板之后运行,请注册您的脚本

于 2013-05-24T20:42:30.830 回答
1

由于您使用的是更新面板,因此您必须使用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 回答