c# - 为什么 javascript 警报未显示在 UpdatePanel 内

标签 c# javascript asp.net updatepanel scriptmanager

我在更新面板中有一个链接按钮:

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="upSaveComplete" ClientIDMode="Static">
    <ContentTemplate>
        <asp:Panel ID="Panel90" runat="server" CssClass="navInnerDiv" Width="200px" ClientIDMode="Static">
            <asp:Panel ID="Panel91" runat="server" CssClass="navInnerDivContents">
                <asp:Panel ID="Panel92" runat="server" CssClass="navInnerDivContentsTop">
                    <asp:Panel ID="Panel93" runat="server" CssClass="navInnerDivContentsTopSubTwo">
                        <asp:ImageButton ID="ibSave" ImageUrl="~/theImages/Save.png" runat="server" CssClass="navImages" OnClick="btnSave_Click" />
                        <br />
                        <asp:LinkButton ID="btnSave" runat="server" Text="Save" ClientIDMode="Static" OnClick="btnSave_Click" CssClass="linkOff" />
                    </asp:Panel>
                </asp:Panel>
                <asp:Panel ID="Panel94" runat="server" CssClass="navInnerDivContentsBottom">
                    Task Actions
                </asp:Panel>
            </asp:Panel>
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

后台代码:

protected void btnSave_Click(object sender, EventArgs e)
{
    ShowMessage();
    if (CheckSameUser() == strUser)
    {
        UpdatePanel upTDNotes = (UpdatePanel)ContentMain.FindControl("upTaskDetailRight");
        if (upTDNotes != null)
        {
            upTDNotes.Update();
        }
        //MessageBox.Show(lblTDNotes.Value);
        string strSaveQuery = @"{QUERY}";
        //MessageBox.Show(strSaveQuery);

        using (SqlConnection scConn = new SqlConnection(strMainConn))
        {
            try
            {
                scConn.Open();
                SqlCommand cmd = new SqlCommand(strSaveQuery, scConn);

                cmd.ExecuteNonQuery();

                Session["queryChanged"] = "Yes";
            }
            catch (Exception ce)
            {
            }
        }
    }
    else
    {
    }
    Response.Redirect("YourTasks.aspx");
}

public void ShowMessage()
{
    string message = "Hello!";
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script type = 'text/javascript'>");
    sb.Append("window.onload=function(){");
    sb.Append("alert('");
    sb.Append(message);
    sb.Append("')};");
    sb.Append("</script>");
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
}

当我单击“保存”按钮时,未显示警报。我已经在页面上安装了 ScriptManager,但它仍然无法工作。

如何修改我的代码,以便我能够在单击链接/图像时看到警报(甚至确认)窗口

最佳答案

缩减到最基本的级别,您的代码是这样的:

ShowMessage();
if (CheckSameUser() == strUser)
{
    // Stuff
}
else
{
}
Response.Redirect("YourTasks.aspx");

因此,您设置了要运行的 javascript 位...然后向浏览器发送指令以重定向到页面“YourTasks.aspx”。

JavaScript 设置为在您的页面发送到浏览器时呈现...但您在页面呈现之前进行重定向,因此 JavaScript 永远不会到达浏览器,因此永远不会执行。

如果您想要的是在单击时立即在客户端上显示消息,然后让服务器执行某些操作(例如保存数据然后将您发送到新页面),那么最好的选择是将 javascript 连接到客户端事件,例如提交表单。您可以使用 jQuery 甚至基本的 javascript 轻松完成此操作(尽管更新面板可能会使事情变得有点复杂。)

关于c# - 为什么 javascript 警报未显示在 UpdatePanel 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25693473/

相关文章:

c# - 我怎样才能在 WinForms 应用程序中捕获所有 'unhandled' 异常?

c# - 是否有适用于 .Net 的良好图形(不是图表)可视化 API?

javascript - 在 webpack 5 中需要 json 加载器

asp.net - 如何将 AD 身份验证 + SSO 与现有 Forms 身份验证的 Saas Web 应用程序集成

.NET ReportViewer 功能 : Displaying multiple rows

asp.net - 如何在 ASP.NET 中实现 float 许可证?

c# - 更新 Entity Framework 中的实体

javascript - 如何使用自定义事件(特别是自定义 dataTransfer 属性)触发事件?

javascript - Angular 1.5.x - 嵌套组件的问题

c# - 使用DirectSound设置不同的音频输出