将 JS 注入 Literal 并在页面加载后触发

Injecting JS into Literal and firing after page load

我有一个 ASPx/C# 页面,单击“保存”后会 post 返回服务器。如果控件中的内容已经存在于被检查的数据存储中,则应该弹出警报。以前的程序员使用:

<asp:Literal ID="litError" runat="server" />

最终发送背后的代码:

litError.Text = "<script type='javascript'>alert('An error occured while processing this request.  If the error persists, please contact the help desk.');</script>";

尽管调试报告一切都已正确处理,但此 JS 警报并未弹出。我已经在互联网上搜索了几天,包括在这里,试图找到解决方案。我已经尝试了很多变体来让它火起来。

我怀疑脚本无法在 AJAX 上触发,因为它在生命周期的加载阶段不存在,但需要一些验证。

脚本在btnSave_OnClick方法中。不幸的是,由于 Web 应用程序的性质,我无法显示更多代码,但脚本应该在应用程序数据库中存在的项目异常或用户已经存在于我们的 AD 系统中时触发。

我不确定为什么文字中的脚本不起作用,但您可以试试这个。

您的脚本文本

 string script = "<script>alert('Your alert message goes here');</script>";

然后使用方法RegisterClientScriptBlock(在您之前设置错误文本的同一事件中)在回发期间将脚本注入页面。

Page.ClientScript.RegisterClientScriptBlock(typeof(YOUR_PAGE_TYPE), "alert", script); 

当页面重新加载时,您应该会看到弹出的警告。

我的理解是;您想要 运行 客户端脚本来自按钮单击事件中的代码(基于条件)。实现此目的的最佳方法是使用 ScriptManger class。示例:

Protected void btnSave_OnClick()
{
   ScriptManager.RegisterStartupScript(btnSave, btnSave.GetType(), "myscript",
     "alert('Your alert message goes here');", true);
}

我能够通过完全删除 ASP 文字控件的使用来解决我的问题。我相信我第一次尝试使用它时没有格式正确的字符串,但它现在可以通过在后面的代码中实现的以下代码正常运行:

StringBuilder sbError = new StringBuilder();
        sbError.Append("<script language='javascript' type='text/javascript'>alert('" + strError + "');</script>");

        ScriptManager.RegisterStartupScript(this, this.GetType(), "sbError", sbError.ToString(), false);

感谢 Zaigham 和 James 的帮助。我认为 Literal 控件方法不起作用的原因是页面上有一个 ScriptManager 控件试图使用该方法。