当前的响应警告框实际上似乎不 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查看:

msgBox方法有问题吗?谢谢。

<script language=javascript>alert("Message")</script>
<!DOCTYPE html >
...

更新一些与答案讨论相关的参考资料

理解Response.WriteClientScript.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 响应的情况下非常有效。

不要忘记转义消息中的 "。