我想在C#
中向用户显示警告后刷新页面我试过
System.Web.UI.ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", "alert('Data has been saved and submitted');", true);
Page.Response.Redirect(Page.Request.Url.ToString());
页面被重定向但我没有得到警告
我也试过
System.Web.UI.ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", "var r = confirm('Data has been saved and submitted confirm'); if (r == true) { <%#namespace.project.class().PageRefresh()%> } else { <%#new namespace.project.class().PageRefresh()%> } ", true);
public void PageRefresh() {
Page.Response.Redirect(Page.Request.Url.ToString());
}
在这种情况下,我会收到警报,但重新加载没有发生
我不想像下面那样使用客户端页面刷新
location.reload(true)
window.location.href = window.location.href
我想用
Page.Response.Redirect(Page.Request.Url.ToString());
但它应在警告用户后执行
答案 0 :(得分:1)
为什么第一次尝试不起作用:在请求期间,您正在注册一个新脚本,然后告诉IIS执行重定向,带脚本的页面不会返回给用户,只是重定向,因为在IIS级别上需要重定向浏览器。
为什么第二次尝试不起作用:您尝试在编译页面之后将c#代码注入客户端脚本。所以<%#...%>
将不会被编译,它将看起来像生成的标记,您可以使用浏览器元素检查器查看结果代码,这将证明它。
虽然您不想这样做,但它应该在客户端实现,因为页面在呈现之后和发布页面之前不会调用c#后端代码。实际上,您可以通过不同的方式实现它:
第一种方法是注册所需的alert
脚本并立即重新加载。当alert
中断页面执行时,用户将不会被重定向,直到他没有在警报窗口中按OK。这种方式简单易懂。
System.Web.UI.ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", "alert('Data has been saved and submitted'); location.reload(true);", true);
另一种方法是在submit
之后执行表单alert
并在服务器端实现重定向,因为你不想写一些js。
System.Web.UI.ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", "alert('Data has been saved and submitted'); document.forms[0].submit();", true);
并在Page_Load
事件中:
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
{
Page.Response.Redirect(Page.Request.Url.ToString());
}
}