下面是我的 WebMsgBox 类。我用它来打印一些消息。
using System;
using Microsoft.VisualBasic;
using System.Text;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
/// <summary>
/// Summary description for WebMsgBox
/// </summary>
public class WebMsgBox
{
protected static Hashtable handlerPages = new Hashtable();
private WebMsgBox()
{
}
public static void Show(string Message)
{
if (!(handlerPages.Contains(HttpContext.Current.Handler)))
{
Page currentPage = (Page)HttpContext.Current.Handler;
if (!((currentPage == null)))
{
Queue messageQueue = new Queue();
messageQueue.Enqueue(Message);
handlerPages.Add(HttpContext.Current.Handler, messageQueue);
currentPage.Unload += new EventHandler(CurrentPageUnload);
}
}
else
{
Queue queue = ((Queue)(handlerPages[HttpContext.Current.Handler]));
queue.Enqueue(Message);
}
}
private static void CurrentPageUnload(object sender, EventArgs e)
{
Queue queue = ((Queue)(handlerPages[HttpContext.Current.Handler]));
if (queue != null)
{
StringBuilder builder = new StringBuilder();
int iMsgCount = queue.Count;
builder.Append("<script language='javascript'>");
string sMsg;
while ((iMsgCount > 0))
{
iMsgCount = iMsgCount - 1;
sMsg = System.Convert.ToString(queue.Dequeue());
sMsg = sMsg.Replace("\"", "'");
builder.Append("alert( \"" + sMsg + "\" );");
}
builder.Append("</script>");
handlerPages.Remove(HttpContext.Current.Handler);
HttpContext.Current.Response.Write(builder.ToString());
}
}
}
当我使用此类的方法时显示如下
WebMsgBox.Show("some message");
它工作正常,但是当我执行如下操作时
WebMsgBox.Show("some message");
Response.Redirect("myform.aspx");
然后它不显示该消息。我需要它,就像执行此代码时一样,首先它显示消息,然后当我单击“确定”按钮(位于消息框上)时,它应该重定向到 myform.aspx。
我不想更改此类的代码,因为我在多种表单中使用此类,我无法仅针对一种表单更改此类的代码。
我怎样才能做到这一点。
最佳答案
您必须重定向客户端:
builder.Append("alert( \"" + sMsg + "\" );");
builder.Append("window.location = 'myform.aspx';");
Response.Redirect 重定向您的页面而不显示它!
关于c# - 单击“确定”按钮后,进行页面重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16958043/