9

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

例如,

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

[消息框显示错误]

谢谢

4

7 回答 7

13

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

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

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

于 2009-03-16T18:25:27.437 回答
12

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

this.RegisterClientScriptBlock(typeof(string), "key",  string.Format("alert('{0}');", ex.Message), true);
于 2009-03-16T18:26:39.880 回答
6

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

你能做的是,

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

如果异常没有冒泡,这将在客户端显示异常。

于 2009-03-16T18:28:50.937 回答
4

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

Response.Write("<script>alert('Exception: ')</script>");
于 2009-03-16T18:27:05.513 回答
1

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

于 2009-03-16T18:28:27.397 回答
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 文字

希望他的帮助。干杯

于 2011-06-26T05:47:51.927 回答
1

如果您将 .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>
}
于 2017-03-24T14:28:43.053 回答