当前的响应警告框实际上似乎不 return 到父页面
current response alert box seems not return to parent page actually
我用下面的代码做了一个消息框。
public static void msgBox(string msg)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script language=javascript>");
sb.Append("alert(\"" + msg + "\")");
sb.Append("</script>");
System.Web.HttpContext.Current.Response.Write(sb);
}
我发现点击提示框中的确认按钮后,页面returns正常。
我按F12查看:
在IE11中,消息框再次显示。
在Chrome和Edge中,不再显示消息框。
在 Firefox 中,消息框不会显示,但我看到在 HTML.
前面插入了一行
msgBox
方法有问题吗?谢谢。
<script language=javascript>alert("Message")</script>
<!DOCTYPE html >
...
更新一些与答案讨论相关的参考资料
理解Response.Write
和ClientScript.RegisterStartupScript
的参考
Difference between Response.Write() and ClientScript.RegisterStartupScript()?
参考 ScriptManager.RegisterStartupScript & ClinetScriptManager.RegisterStartupScript
ScriptManager.RegisterStartupScript Method | Microsoft Docs
ClientScriptManager.RegisterStartupScript Method | Microsoft Docs
因为你提到了父页面,我不确定你是否在 C# Web Forms 中测试?
我在带有母版页的 WebForms 页面中对其进行了测试。我在内容页的Page_Load事件中调用了MsgBox(),但是你说的浏览器都是一样的效果。确认提示框内容后,没有任何反应。
并且在html声明之前添加的脚本代码应该是Chrome浏览器和MS Edge中的结果。在 IE 或 FireFox 中,脚本代码将被添加到页面 Head 中。像这样:
而且我不确定你是如何测试它的,你能否提供更多细节,例如可以重现问题的最小代码示例。
System.Web.HttpContext.Current.Response.Write(sb);
不是在页面中注入 js 脚本的最佳方式。它将在响应创建过程中的当前位置写入响应中的js代码。所以你不能确定js代码在响应中的确切位置。
我会推荐:
using System.Web.UI;
ScriptManager.RegisterStartupScript(Page, typeof(Page), "anyId", "alert(\"" + msg + "\");", true);
另一个优点是这在 Ajaxified 响应的情况下非常有效。
不要忘记转义消息中的 "。
我用下面的代码做了一个消息框。
public static void msgBox(string msg)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script language=javascript>");
sb.Append("alert(\"" + msg + "\")");
sb.Append("</script>");
System.Web.HttpContext.Current.Response.Write(sb);
}
我发现点击提示框中的确认按钮后,页面returns正常。
我按F12查看:
在IE11中,消息框再次显示。
在Chrome和Edge中,不再显示消息框。
在 Firefox 中,消息框不会显示,但我看到在 HTML.
前面插入了一行
msgBox
方法有问题吗?谢谢。
<script language=javascript>alert("Message")</script>
<!DOCTYPE html >
...
更新一些与答案讨论相关的参考资料
理解Response.Write
和ClientScript.RegisterStartupScript
的参考
Difference between Response.Write() and ClientScript.RegisterStartupScript()?
参考 ScriptManager.RegisterStartupScript & ClinetScriptManager.RegisterStartupScript
ScriptManager.RegisterStartupScript Method | Microsoft Docs
ClientScriptManager.RegisterStartupScript Method | Microsoft Docs
因为你提到了父页面,我不确定你是否在 C# Web Forms 中测试?
我在带有母版页的 WebForms 页面中对其进行了测试。我在内容页的Page_Load事件中调用了MsgBox(),但是你说的浏览器都是一样的效果。确认提示框内容后,没有任何反应。
并且在html声明之前添加的脚本代码应该是Chrome浏览器和MS Edge中的结果。在 IE 或 FireFox 中,脚本代码将被添加到页面 Head 中。像这样:
而且我不确定你是如何测试它的,你能否提供更多细节,例如可以重现问题的最小代码示例。
System.Web.HttpContext.Current.Response.Write(sb);
不是在页面中注入 js 脚本的最佳方式。它将在响应创建过程中的当前位置写入响应中的js代码。所以你不能确定js代码在响应中的确切位置。
我会推荐:
using System.Web.UI;
ScriptManager.RegisterStartupScript(Page, typeof(Page), "anyId", "alert(\"" + msg + "\");", true);
另一个优点是这在 Ajaxified 响应的情况下非常有效。
不要忘记转义消息中的 "。