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

问题描述:

我有一个ASPx/C#页面,它在单击Save时会回发到服务器。如果控件中的内容已存在于被检查的数据存储中,则应该弹出警报。使用以前的程序员:将JS注入Literal并在页面加载后触发

<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系统中。

我能够通过完全删除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和詹姆斯试图帮助。我相信Literal控制方法不起作用的原因是因为在尝试使用该方法的页面上存在ScriptManager控件。

我不完全确定为什么字面上的脚本无法正常工作,但您可以尝试此操作。

你的脚本文本

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

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

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

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

+0

我测试了你的建议示例并得到了相同的结果。我开始认为另一块JS阻止了警报的发生。我将不得不与原始开发人员一起解密他的逻辑,我想! –

+0

如果您认为其他脚本导致此问题,您可能需要查看浏览器的开发者控制台。通常他们会包含一些有用的错误细节。 –

+0

我今天肯定会这样做。我会尽力回到这里来报告我的发现。 –

我明白的是;你想从后面的代码中运行客户端脚本,并在按钮单击事件中(基于条件)。实现这一点的最好方法是使用ScriptManger类。示例:

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

我有使用这种方法相同的结果。我开始认为问题出在其他JS上,或者甚至可能存在于母版页内容空间中的回调中。 如果您有任何进一步的建议,我会很高兴尝试它们,但即使从项目中取出并单独运行的当前代码也能正常工作。这个问题必须是当它被传递或回调时。 –

+0

如果在该脚本代码根本无法运行的脚本之前发生脚本错误,您是否可以检查浏览器控制台? –

+0

我今天肯定会这样做。我会尽力回到这里来报告我的发现。 –