【问题标题】:How to display an error message box in a web application asp.net c#如何在Web应用程序asp.net c#中显示错误消息框
【发布时间】:2010-10-13 16:32:07
【问题描述】:

我有一个 ASP.NET Web 应用程序,我想知道在引发异常时如何显示错误消息框。

例如,

        try
        {
            do something
        }
        catch 
        {
            messagebox.write("error"); 
            //[This isn't the correct syntax, just what I want to achieve]
        }

[消息框显示错误]

谢谢

【问题讨论】:

    标签: c# asp.net web-applications messagebox


    【解决方案1】:

    您无法在客户端计算机或服务器上合理地显示消息框。对于客户端的计算机,您需要重定向到带有适当错误消息的错误页面,如果需要,可能包括异常消息和堆栈跟踪。在服务器上,您可能需要记录一些日志,记录到事件日志或日志文件。

     try
     {
         ....
     }
     catch (Exception ex)
     {
         this.Session["exceptionMessage"] = ex.Message;
         Response.Redirect( "ErrorDisplay.aspx" );
         log.Write( ex.Message  + ex.StackTrace );
     }
    

    请注意,上面的“日志”必须由您实现,可能使用 log4net 或其他一些日志记录实用程序。

    【讨论】:

    • @tvanfosson - 并不是他们不能在服务器端或客户端显示消息框。他们应该避免这样做。 :)
    【解决方案2】:

    您不能只调用 messagebox.write,因为您已与客户端断开连接。您应该注册显示消息框的 javascript 代码:

    this.RegisterClientScriptBlock(typeof(string), "key",  string.Format("alert('{0}');", ex.Message), true);
    

    【讨论】:

    • 如果异常会导致请求页面的呈现出现问题,我更喜欢单独的错误页面。
    • 我认为警报或单独页面是否是正确的解决方案取决于上下文。
    【解决方案3】:

    我过去这样做的方法是在抛出异常时在页面上填充信息。 MessageBox 用于 Windows 窗体,不能用于 Web 窗体。我想你可以在页面上放一些 javascript 来发出警报:

    Response.Write("<script>alert('Exception: ')</script>");
    

    【讨论】:

    • 正是我想要的,到目前为止最简单的方法。
    【解决方案4】:

    我认为您不会想要显示异常的详细信息。我们不得不停止这样做,因为我们的一位客户不希望他们的用户看到异常详细信息中可用的所有内容。尝试显示一个 javascript 窗口,其中包含一些说明存在问题的信息。

    【讨论】:

      【解决方案5】:

      使用 MessageBox.Show() 将导致消息框显示在服务器中并停止线程处理进一步的请求,除非该框已关闭。

      你能做的是,

      this.Page.ClientScript.RegisterStartupScript(this.GetType(),"ex","alert('" + ex.Message + "');", true);
      

      这将在客户端显示异常,前提是异常没有冒泡。

      【讨论】:

        【解决方案6】:

        如果您想在一个地方处理所有错误,您可以使用 web 应用程序的 global.asax 文件(也称为全局应用程序文件),并处理应用程序错误事件。首先你将全局应用程序文件添加到你的项目中,然后在 Application_Error 事件中放置一些错误处理代码,如下所示:

            void Application_Error(object sender, EventArgs e) 
        {
            Exception objErr = Server.GetLastError().GetBaseException();
            string err = "Error Caught in Application_Error event\n" +
                    "Error in: " + Request.Url.ToString() +
                    "\nError Message:" + objErr.Message.ToString() +
                    "\nStack Trace:" + objErr.StackTrace.ToString();
            System.Diagnostics.EventLog.WriteEntry("Sample_WebApp", err, System.Diagnostics.EventLogEntryType.Error);
            Server.ClearError();
            Response.Redirect(string.Format("{0}?exceptionMessage={1}", System.Web.VirtualPathUtility.ToAbsolute("~/ErrorPage.aspx"), objErr.Message));
        }
        

        这会将您的异常的技术细节记录到系统事件日志中(如果您需要稍后检查错误) 然后在您的 ErrorPage.aspx 上,您从 Page_Load 事件的查询字符串中捕获异常消息。如何显示它取决于您(您可以使用其他答案中建议的 javascript 警报或简单地将文本传递给 asp.net 文字

        希望他的帮助。干杯

        【讨论】:

          【解决方案7】:

          如果您将 .NET Core 与 MVC 和 Razor 一起使用,则在呈现页面之前您需要进行多个级别的预处理。然后我建议您尝试在视图页面顶部包装一条条件错误消息,如下所示:

          在 ViewController.cs 中:

          if (file.Length < 800000)
          {
              ViewData["errors"] = "";
          }
          else
          {
              ViewData["errors"] = "File too big. (" + file.Length.ToString() + " bytes)";
          }
          

          在 View.cshtml 中:

          @if (ViewData["errors"].Equals(""))
          {
              @:<p>Everything is fine.</p>
          }
          else
          {
              @:<script>alert('@ViewData["errors"]');</script>
          }
          

          【讨论】:

            猜你喜欢
            • 2010-10-13
            • 2012-05-05
            • 2012-03-31
            • 2011-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多