C# 单击“确定”按钮后,执行页面重定向

C# 单击“确定”按钮后,执行页面重定向,c#,javascript,class,messagebox,C#,Javascript,Class,Messagebox,下面是我的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 ///

下面是我的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());

        }

    }

}
Server.Transfer("yourPageName.aspx");
它工作得很好,但当我做下面这样的事情时

WebMsgBox.Show("some message");
WebMsgBox.Show("some message");
Response.Redirect("myform.aspx");
Server.Transfer("yourPageName.aspx");
那么它就不会显示消息。我需要它,就像这个代码执行时一样,首先它显示消息,然后当我单击ok按钮(在消息框上)时,它应该重定向到myform.aspx

Server.Transfer("yourPageName.aspx");

我不想改变,这个类的代码,因为我对很多表单使用这个类,我不能只为一个表单改变这个类的代码

Server.Transfer("yourPageName.aspx");

我该怎么做。

您必须重定向客户端:

   builder.Append("alert( \"" + sMsg + "\" );");
   builder.Append("window.location = 'myform.aspx';");
Server.Transfer("yourPageName.aspx");

响应。重定向页面而不显示它

您可以向函数中添加可选参数

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();

    protected static string redirectUrl = "";

    private WebMsgBox()
    {

    }


    public static void Show(string Message, string redirectUrl = "")
    {

        if (!(handlerPages.Contains(HttpContext.Current.Handler)))
        {

            Page currentPage = (Page)HttpContext.Current.Handler;

            if (!((currentPage == null)))
            {
                if (!string.IsNullOrWhiteSpace(redirectUrl))
                    WebMsgBox.redirectUrl = redirectUrl;

                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 + "\" );");

            }

            if (!string.IsNullOrWhiteSpace(WebMsgBox.redirectUrl))
            {
                builder.Append("window.location = '" + WebMsgBox.redirectUrl + "'");
                WebMsgBox.redirectUrl = "";
            }

            builder.Append("</script>");

            handlerPages.Remove(HttpContext.Current.Handler);

            HttpContext.Current.Response.Write(builder.ToString());

        }

    }

}
Server.Transfer("yourPageName.aspx");
使用系统;
使用Microsoft.VisualBasic;
使用系统文本;
使用系统集合;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
/// 
///WebMsgBox的摘要说明
/// 
公共类WebMsgBox
{
受保护的静态哈希表handlerPages=新哈希表();
受保护的静态字符串重定向URL=“”;
私有WebMsgBox()
{
}
公共静态无效显示(字符串消息,字符串重定向URL=”“)
{
if(!(handlerPages.Contains(HttpContext.Current.Handler)))
{
Page currentPage=(Page)HttpContext.Current.Handler;
如果(!((currentPage==null)))
{
如果(!string.IsNullOrWhiteSpace(重定向URL))
WebMsgBox.redirectUrl=重定向URL;
Queue messageQueue=新队列();
messageQueue.Enqueue(消息);
添加(HttpContext.Current.Handler,messageQueue);
currentPage.Unload+=新事件处理程序(CurrentPageUnload);
}
}
其他的
{
队列=((队列)(handlerPages[HttpContext.Current.Handler]);
排队(消息);
}
}
私有静态void CurrentPageUnload(对象发送方,事件参数e)
{
队列=((队列)(handlerPages[HttpContext.Current.Handler]);
if(队列!=null)
{
StringBuilder=新的StringBuilder();
int iMsgCount=queue.Count;
生成器。追加(“”);
字符串sMsg;
而((iMsgCount>0))
{
iMsgCount=iMsgCount-1;
sMsg=System.Convert.ToString(queue.Dequeue());
sMsg=sMsg。替换(“\”,“”);
追加(“警报(\”“+sMsg+\”);”;
}
如果(!string.IsNullOrWhiteSpace(WebMsgBox.redirectUrl))
{
Append(“window.location=”+WebMsgBox.redirectUrl+”);
WebMsgBox.redirectUrl=“”;
}
生成器。追加(“”);
移除(HttpContext.Current.Handler);
HttpContext.Current.Response.Write(builder.ToString());
}
}
}

将此添加到您的课堂:

protected static Hashtable contexts = new Hashtable();
Server.Transfer("yourPageName.aspx");
更改
Show
方法的定义:

public static void Show(string Message, string redirect) 
{
   // ...
   messageQueue.Enqueue(Message);

   handlerPages.Add(HttpContext.Current.Handler, messageQueue);
   contexts.Add(HttpContext.Current.Handler, redirect); // add this line

   currentPage.Unload += new EventHandler(CurrentPageUnload);
   // ...
}
Server.Transfer("yourPageName.aspx");
更改
CurrentPageUnload

string redirect= contexts[HttpContext.Current.Handler].ToString(); // add this line
// ...
builder.Append("alert( \"" + sMsg + "\" );");
builder.Append("window.location = '" + redirect + "';"); // add this line
Server.Transfer("yourPageName.aspx");
可以这样称呼:

WebMsgBox.Show("some message","myform.aspx");
Server.Transfer("yourPageName.aspx");

JavaScript警报函数没有回调函数,当您单击“确定”按钮时将执行回调函数。或者您希望从JavaScript本身重定向,并在警报消息之后添加下面的代码

window.location = 'yourform.aspx"';
Server.Transfer("yourPageName.aspx");

Server.Transfer("yourPageName.aspx");

您可以使用,它在单击按钮时执行您的代码。您也可以检查现在已存档的版本,但您可以使用前面提到的修改版本。我也想这样做。我尝试了不同的方法,但都不起作用。
Server.Transfer("yourPageName.aspx");
这是解决方案,对我来说100%有效

Server.Transfer("yourPageName.aspx");

您需要使用window.location执行客户端重定向。服务器端重定向不会向浏览器发送任何生成的html,它只发送303状态。我对许多表单使用此类,不能仅为一个表单更改此类的代码。还有其他解决方案吗?您可以向函数添加可选参数“messageQueu”“e”在当前内容中不存在。我的意思是应该在当前内容中添加一行。通过
/…
我想告诉您应该保留以前的方法内容,只需添加
上下文。添加(HttpContext.current.Handler,重定向);
line。如果要在不同的页面上使用,您认为将其声明为静态是一个好主意吗?@AlexFilipovici您是对的!卸载页面后应将其设置为null