Asp.net mvc 3 在MVC3 RAZOR视图引擎中显示带有视图的异常消息

Asp.net mvc 3 在MVC3 RAZOR视图引擎中显示带有视图的异常消息,asp.net-mvc-3,Asp.net Mvc 3,我有一个这样的模型: public class Post { public int PostId { get; set; } public int ParentId { get; set; } public string PostTitle { get; set; } public IEnumerable<Post> ChildPosts { get; set; } } 公共类职位 { 公共int Po

我有一个这样的模型:

public class Post
    {
        public int PostId { get; set; }
        public int ParentId { get; set; }
        public string PostTitle { get; set; }
        public IEnumerable<Post> ChildPosts { get; set; }
    }
公共类职位
{
公共int PostId{get;set;}
public int ParentId{get;set;}
公共字符串PostTitle{get;set;}
公共IEnumerable子帖子{get;set;}
}
我的控制器中还有一个add操作,它将上面的模型返回add.cshtml视图。现在说到我的应用程序运行模式,我遇到了一个异常(比如数据库连接异常)。现在我想在add.cshtml页面中显示我的异常消息


可能吗?如果有的话。我怎样才能完成这项工作。请使用示例代码进行解释。

如果要在同一视图上显示错误消息:

[HttpPost]
public ActionResult Add(Post post)
{
    try
    {
        // do your database stuff ...
        return RedirectToAction("Success");
    }
    catch (SomeExceptionouNeedToHandle ex)
    {
        ModelState.AddModelError("", ex);
        return View(post);
    }
}
Add.cshtml
视图中,您可以使用
ValidationSummary
帮助程序显示错误消息:

@Html.ValidationSummary()
另一种可能性是有一个通用错误页面,当发生意外异常时,该页面将显示。通常,您应该只捕获要处理的异常。在控制器操作中捕获一般异常是不好的做法


下面是一个异常处理的示例。

如果要在同一视图上显示错误消息:

[HttpPost]
public ActionResult Add(Post post)
{
    try
    {
        // do your database stuff ...
        return RedirectToAction("Success");
    }
    catch (SomeExceptionouNeedToHandle ex)
    {
        ModelState.AddModelError("", ex);
        return View(post);
    }
}
Add.cshtml
视图中,您可以使用
ValidationSummary
帮助程序显示错误消息:

@Html.ValidationSummary()
另一种可能性是有一个通用错误页面,当发生意外异常时,该页面将显示。通常,您应该只捕获要处理的异常。在控制器操作中捕获一般异常是不好的做法


这里是一个异常处理的示例。

我建议您使用Elmah异常处理,您可以查看我提供给您的这两个链接


我建议您使用Elmah异常处理,您可以查看我提供给您的这两个链接


这会显示DBException吗?为什么我要这样使用它?你是对的。实际上我还在编辑我的答案。捕捉一般异常是不好的做法。我现在已经更新了我的答案。一般未处理的异常可能应该单独处理并显示在特定的错误视图中。虽然这是修复错误的好方法,但我仍然不会在视图中使用它,但我会将其放入日志文件中,因为谷歌可能会扫描错误,这不好,从个人经验来看。正确,不应该显示技术错误,只有业务验证错误。这会显示DBExceptions吗?为什么我要这样使用它?你是对的。实际上我还在编辑我的答案。捕捉一般异常是不好的做法。我现在已经更新了我的答案。一般未处理的异常可能应该单独处理并显示在特定的错误视图中。虽然这是修复错误的好方法,但我仍然不会在视图中使用它,但我会将其放入日志文件中,因为谷歌可能会扫描错误,这不好,从个人经验来看。正确,不应该显示技术错误,只有业务验证错误。