1

下面是我的 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。

我不想改变这个类的代码,因为我将这个类用于许多表单,我不能只为一个表单更改这个类的代码。

我怎样才能做到这一点。

4

5 回答 5

0

将此添加到您的课程中:

protected static Hashtable contexts = new Hashtable();

更改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);
   // ...
}

更改CurrentPageUnload

string redirect= contexts[HttpContext.Current.Handler].ToString(); // add this line
// ...
builder.Append("alert( \"" + sMsg + "\" );");
builder.Append("window.location = '" + redirect + "';"); // add this line

像这样称呼它:

WebMsgBox.Show("some message","myform.aspx");
于 2013-06-06T09:27:33.240 回答
0

JavaScript 警报函数没有回调函数,当您单击确定按钮时将执行该回调函数。您想从 Javascript 本身重定向并在警报消息后立即添加以下代码。

window.location = 'yourform.aspx"';

或者

您可以使用Jquery UI 对话框,它在按钮单击时执行您的代码。您还可以查看现在存档的jAlert 插件,但您可以使用此处提到的修改版本

于 2013-06-06T09:27:40.677 回答
0

您必须重定向客户端:

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

Response.Redirect 重定向您的页面而不显示它!

于 2013-06-06T09:13:34.053 回答
0

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

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

        }

    }

}
于 2013-06-06T09:25:14.343 回答
0

我也想这样做。我尝试了不同的方法,但都没有奏效。这是解决方案,为我工作了 100%。

Server.Transfer("yourPageName.aspx");
于 2017-02-14T05:56:25.627 回答