[英]Page doesn't postback after clicking OK in confirm box for Radiobuttonlist
[英]After clicking ok button, do page redirect
下面是我的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。
我不想更改,此類的代碼,B'Cos我將此類用於多種形式,我不能僅針對一種形式更改此類的代碼。
我怎樣才能做到這一點。
您必須重定向客戶端:
builder.Append("alert( \"" + sMsg + "\" );");
builder.Append("window.location = 'myform.aspx';");
Response.Redirect重定向頁面而不顯示它!
您可以在函數中添加可選的paramiter
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());
}
}
}
將此添加到您的班級:
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");
JavaScript警報功能沒有回調函數,當您單擊“確定”按鈕時將執行該回調函數。 您想從Javascript本身重定向並在警報消息之后立即添加以下代碼。
window.location = 'yourform.aspx"';
要么
您可以使用Jquery UI對話框 ,單擊按鈕即可執行代碼。 您還可以簽出現已存檔的jAlert插件 ,但可以使用此處提到的修改版本
我也想這樣做。 我嘗試了不同的方法,但沒有一個起作用。 這是解決方案,為我工作了100%。
Server.Transfer("yourPageName.aspx");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.