如何在asp.net c#的web应用程序中显示错误消息框

9

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

例如:

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

[消息框显示错误]

谢谢

7个回答

14

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

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

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


@tvanfosson - 并不是说他们不能在服务器端或客户端显示消息框。他们只是应该避免这样做。 :) - Ramesh

13

你不能直接调用messagebox.write,因为你与客户端断开了连接。你应该注册一个显示消息框的JavaScript代码:

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

如果异常会影响所请求页面的渲染,我更喜欢使用单独的错误页面。 - tvanfosson
我认为,如果要选择警报还是独立页面的正确解决方案,则取决于具体情境。 - Michiel Overeem

6

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

您可以做的是,

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

这将在客户端显示异常,前提是该异常未被冒泡。

5

我过去处理这个问题的方式是,在抛出异常时在页面上填充有关信息。MessageBox 用于 Windows Forms,不能用于 Web Forms。我想你可以在页面上放置一些 JavaScript 来进行警报:

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

正是我所寻找的,迄今为止最简单的完成方式。 - J_L
这是最直接的答案。 - Hamid Siaban

1
如果您想在一个地方处理所有错误,可以使用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文字)

希望这有所帮助。干杯


1
我认为您不希望显示异常的详细信息。我们不得不停止这样做,因为我们的一个客户不希望他们的用户看到异常详细信息中提供的所有内容。尝试显示一个JavaScript窗口,其中包含一些信息,解释出现了问题。

1
如果您正在使用MVC和Razor的.NET Core,您的页面在呈现之前有几个预处理级别。那么我建议您尝试在视图页面顶部包装一个条件错误消息,如下所示:
在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>
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接