【问题标题】:alert in class file of ASP.NET not on Code BehindASP.NET 的类文件中的警报不在代码后面
【发布时间】:2015-06-13 08:35:33
【问题描述】:

我试图在类文件(即.cs 文件)中而不是在页面的代码后面给出警告消息。但是任何常规的方法都不能达到同样的效果!

也试过these Solutions...

ClientScriptScriptManager.RegisterStartupScript 都要求 Control 作为第一个参数,我不明白该做什么 提供!

真的有可能吗? :|如果是,那么...
有什么方法可以从类文件中发出警报?

【问题讨论】:

  • 反对者,请发表评论并让我知道错误
  • 我没有否决这个问题,但我相信您还有很多空间可以了解 Web 开发以及 ASP.NET Web 表单。顺便说一句,您还在使用 Web 表单吗??
  • 你的意思是在类 .cs 文件中发出警报而不是代码隐藏
  • 另外,我想说你需要更好地格式化你的问题。为什么你使用报价格式来自己谈论这个问题? :|
  • @Vikrant 我猜业务层从代码隐藏调用,所以你不应该在业务层调用这个警报消息,你可以简单地抛出异常,在代码隐藏中捕获它们并使用ClientScript或@987654327 @like in solution by link in your post

标签: javascript c# asp.net


【解决方案1】:

适用于 .net 1.1,因此应该适用于较新的 .net 框架

public class MessageBox
{
    private static Hashtable m_executingPages = new Hashtable();
    private MessageBox(){}
    /// <summary>
    /// Show Event for the Messagebox
    /// </summary>
    /// <param name="sMessage">Pass String to Display</param>
    public static void Show( string sMessage )
    {
        // If this is the first time a page has called this method then
        if( !m_executingPages.Contains( HttpContext.Current.Handler ) )
        {
            // Attempt to cast HttpHandler as a Page.
            Page executingPage = HttpContext.Current.Handler as Page;
            if( executingPage != null )
            {
                // Create a Queue to hold one or more messages.
                Queue messageQueue = new Queue();
                // Add our message to the Queue
                messageQueue.Enqueue( sMessage );
                // Add our message queue to the hash table. Use our page reference
                // (IHttpHandler) as the key.
                m_executingPages.Add( HttpContext.Current.Handler, messageQueue );
                // Wire up Unload event so that we can inject 
                // some JavaScript for the alerts.
                executingPage.Unload += new EventHandler( ExecutingPage_Unload );
            }  
        }
        else
        {
            // If were here then the method has allready been 
            // called from the executing Page.
            // We have allready created a message queue and stored a
            // reference to it in our hastable. 
            Queue queue = (Queue) m_executingPages[ HttpContext.Current.Handler ];
            // Add our message to the Queue
            queue.Enqueue( sMessage );
        }
    }

    // Our page has finished rendering so lets output the
    // JavaScript to produce the alert's
    private static void ExecutingPage_Unload(object sender, EventArgs e)
    {
        // Get our message queue from the hashtable
        Queue queue = (Queue) m_executingPages[ HttpContext.Current.Handler ];
        if( queue != null )
        {
            StringBuilder sb = new StringBuilder();
            // How many messages have been registered?
            int iMsgCount = queue.Count;
            // Use StringBuilder to build up our client slide JavaScript.
            sb.Append( "<script language='javascript'>" );
            // Loop round registered messages
            string sMsg;
            while( iMsgCount-- > 0 )
            {
                sMsg = (string) queue.Dequeue();
                sMsg = sMsg.Replace( "\n", "\\n" );
                sMsg = sMsg.Replace( "\"", "'" );
                sb.Append( @"alert( """ + sMsg + @""" );" );
            }
            // Close our JS
            sb.Append( @"</script>" );
            // Were done, so remove our page reference from the hashtable
            m_executingPages.Remove( HttpContext.Current.Handler );
            // Write the JavaScript to the end of the response stream.
            HttpContext.Current.Response.Write( sb.ToString() );
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2011-04-19
    • 2011-04-12
    • 1970-01-01
    • 2011-10-26
    • 2010-10-17
    • 1970-01-01
    • 2019-07-23
    相关资源
    最近更新 更多