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

时间:2017-08-15 15:00:36

标签: javascript c# asp.net ajax literals

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

<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上触发,因为它在生命周期的Load阶段不存在,但是想要进行一些验证。

该脚本位于btnSave_OnClick方法中。遗憾的是,由于Web应用程序的性质,我无法显示更多代码,但脚本应该触发应用程序数据库中存在的项目或者用户已经存在于我们的AD系统中的例外情况。

3 个答案:

答案 0 :(得分:1)

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

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控件。

答案 1 :(得分:0)

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

您的脚本文字

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

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

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

当页面加载回来时,您应该会看到警告弹出。

答案 2 :(得分:0)

我理解的是;您希望从按钮单击事件中的代码运行客户端脚本(基于条件)。实现此目的的最佳方法是使用ScriptManger类。例如:

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