将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);
当页面加载回来时,您应该看到弹出的警告。
我明白的是;你想从后面的代码中运行客户端脚本,并在按钮单击事件中(基于条件)。实现这一点的最好方法是使用ScriptManger类。示例:
Protected void btnSave_OnClick()
{
ScriptManager.RegisterStartupScript(btnSave, btnSave.GetType(), "myscript",
"alert('Your alert message goes here');", true);
}
我有使用这种方法相同的结果。我开始认为问题出在其他JS上,或者甚至可能存在于母版页内容空间中的回调中。 如果您有任何进一步的建议,我会很高兴尝试它们,但即使从项目中取出并单独运行的当前代码也能正常工作。这个问题必须是当它被传递或回调时。 –
如果在该脚本代码根本无法运行的脚本之前发生脚本错误,您是否可以检查浏览器控制台? –
我今天肯定会这样做。我会尽力回到这里来报告我的发现。 –
我测试了你的建议示例并得到了相同的结果。我开始认为另一块JS阻止了警报的发生。我将不得不与原始开发人员一起解密他的逻辑,我想! –
如果您认为其他脚本导致此问题,您可能需要查看浏览器的开发者控制台。通常他们会包含一些有用的错误细节。 –
我今天肯定会这样做。我会尽力回到这里来报告我的发现。 –