单击确定按钮后,执行页面重定向

本文关键字:执行 重定向 按钮 单击 | 更新日期: 2023-09-27 18:17:06

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

则不显示消息。我需要它,就像这段代码执行时一样,首先它显示消息,然后当我单击ok按钮(在消息框上)时,它应该重定向到myform.aspx。

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

单击确定按钮后,执行页面重定向

您必须重定向客户端:

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

反应。重定向重定向您的页面而不显示它!

JavaScript alert函数没有回调函数,当您点击ok按钮时将执行该函数。或者你想从Javascript本身重定向,并在你的警告消息后添加下面的代码:

window.location = 'yourform.aspx"';

你可以使用Jquery UI对话框,它执行你的代码按钮单击。你也可以查看jAlert插件它现在已经存档了但你可以使用修改过的版本

添加到您的类:

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

你可以给你的函数添加一个可选参数

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

我也想这样做。我试过不同的方法,但都不起作用。这是解决方案,对我来说100%有效。

Server.Transfer("yourPageName.aspx");