ASP.NET Jquery C#MessageBox.Show对话框呃…问题

我正在维护一个ASP.NET站点,我试图使用jQuery让对话框看起来更好。 Web应用程序有一个名为MessageBox的C#类,它允许从服务器端向客户端显示消息….基本上在aspx代码隐藏的C#中,如果某些逻辑“不计算”,你可以只使用MessageBox.Show( ‘你的错误信息’);

由于MessageBox类似乎只是’注入’javascript …“alert(你的消息)”我尝试将javascript更改为jquery对话框调用:

html:标准的jQuery示例对话框…(故意切断标签……只是为了让代码示例显示出来……在这里可能有一种真正的方法可以做到这一点……但这是我的第一篇文章…)

 div id =“dialog”title =“示例对话框”>
  p>您要向用户显示的某些文本./p>
 / DIV>

jQuery:我注释掉了Alert,并替换了:sb.Append(“$(’dialog’)。dialog(’open’);”);

 while(iMsgCount--> 0)
 {
   sMsg =(string)queue.Dequeue();
   sMsg = sMsg.Replace(“\ n”,“\\ n”);
   sMsg = sMsg.Replace(“\”“,”'“);
   //sb.Append(@“alert(”“”+ sMsg + @“”“);”);

   **** sb.Append(“$('dialog')。dialog('open');”);  ****
 }

我期待这个打开html中设置的对话框,但没有显示。 我认为javascript是javascript …而且执行jQuery调用而不是手动警报无关紧要……但显然存在断开连接。

有关如何解决这个问题的任何想法? 或者我不知道的任何更好的实现?

谢谢,对于任何和所有的帮助……我在下面包含了完整的MessageBox类。

柯特。

 public class MessageBox {private static Hashtable m_executingPages = new Hashtable();  private MessageBox(){} public static void Show(string sMessage){if(!m_executingPages.Contains(HttpContext.Current.Handler)){Page executionPage = HttpContext.Current.Handler as Page;  if(executionPage!= null){Queue messageQueue = new Queue();  messageQueue.Enqueue(sMessage);  m_executingPages.Add(HttpContext.Current.Handler,messageQueue);  executionPage.Unload + = new EventHandler(ExecutingPage_Unload);  } else {Queue queue =(Queue)m_executingPages [HttpContext.Current.Handler];  queue.Enqueue(sMessage);  private static void ExecutingPage_Unload(object sender,EventArgs e){Queue queue =(Queue)m_executingPages [HttpContext.Current.Handler];  if(queue!= null){StringBuilder sb = new StringBuilder();  int iMsgCount = queue.Count;  sb.Append(“”);  string sMsg;  while(iMsgCount--> 0){sMsg =(string)queue.Dequeue();  sMsg = sMsg.Replace(“\ n”,“\\ n”);  sMsg = sMsg.Replace(“\”“,”'“); sb.Append(@”alert(“”“+ sMsg + @”“”);“);} sb.Append(@”“); m_executingPages .Remove(HttpContext.Current.Handler); HttpContext.Current.Response.Write(sb.ToString());}}} 

这很奇怪……很久以前我写了几乎相同的课程。 一秒钟我以为你在使用它!

无论如何,我挖出了我的代码。 我已经习惯了很多。 它允许您指定“回调”函数名称,以防您不想使用“警报”function。

顺便说一句,你需要小心静态Hashtable 。 如果你有多个人同时使用该应用程序,他们可能会得到彼此的消息。

用法:

   

我没有测试回调脚本,但你明白了。

和代码:

 ///  /// MessageBox is a class that allows a developer to enqueue messages to be /// displayed to the user on the client side, when the page next loads ///  public class MessageBox : System.Web.UI.UserControl { ///  /// queues up a message to be displayed on the next rendering. ///  public static void Show( string message ) { Messages.Enqueue( message ); } ///  /// queues up a message to be displayed on the next rendering. ///  public static void Show( string message, params object[] args ) { Show( string.Format( message, args ) ); } ///  /// override of OnPreRender to render any items in the queue as javascript ///  protected override void OnPreRender( EventArgs e ) { base.OnPreRender( e ); if ( Messages.Count > 0 ) { StringBuilder script = new StringBuilder(); int count = 0; script.AppendLine( "var messages = new Array();" ); while ( Messages.Count > 0 ) { string text = Messages.Dequeue(); text = text.Replace( "\\", "\\\\" ); text = text.Replace( "\'", "\\\'" ); text = text.Replace( "\r", "\\r" ); text = text.Replace( "\n", "\\n" ); script.AppendFormat( "messages[{0}] = '{1}';{2}", count++, HttpUtility.HtmlEncode(text), Environment.NewLine ); } if ( string.IsNullOrEmpty( Callback ) ) { // display as "alert"s if callback is not specified script.AppendFormat( "for(i=0;i /// gets or sets the name of the javascript method to call to display the messages ///  public string Callback { get { return callback; } set { callback = value; } } private string callback; ///  /// helper to expose the queue in the session ///  private static Queue Messages { get { Queue messages = (Queue)HttpContext.Current.Session[MessageQueue]; if ( messages == null ) { messages = new Queue(); HttpContext.Current.Session[MessageQueue] = messages; } return messages; } } private static string MessageQueue = "MessageQueue"; } 

将发出的Javascript包装在$(function() { ... })

“在页面完全呈现,发送到客户端并准备好被丢弃之后引发Unload()事件。此时,将卸载诸如Response()和Request()之类的页面属性并执行清理。 “ http://msdn.microsoft.com/en-us/library/ms178472.aspx

您必须在页面的渲染过程中添加输出,而不是在卸载事件中。

在阅读上面的内容后,它会以“警报”工作,我会说我的答案不会有所帮助。 但是我会说奇怪的是它确实有效,因为它不应该给出在asp.net中触发事件的方式