在剃刀中将null异常作为模型

时间:2013-06-11 08:53:02

标签: c# asp.net .net asp.net-mvc razor

我的asp.net mvc4应用程序中有一个错误视图,如下所示:

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Erreur";
}
<p>Take it easy</p>
<hgroup class="title">
    <h1 class="error">Erreur = @Model.Exception</h1>
    <h1 class="error">Controller = @Model.ControllerName</h1>
    <h1 class="error">Name = @Model.ActionName</h1>
    <h2 class="error">Une erreur s'est produite lors du traitement de la requête.</h2>    
</hgroup>

控制器代码:

 public class HomeController : Controller
 {
     [HttpGet]
     public ActionResult Index()
     {
         return RedirectToAction("Search");
     }

     public ActionResult Error()
     {
         return View();
     }

     public ActionResult About()
     {
         ViewBag.Message = "Votre page de description d’application.";

         return View();
     }

     public ActionResult Contact()
     {
         ViewBag.Message = "Votre page de contact.";

         return View();
     }

问题是Model始终为空。这是什么原因?

3 个答案:

答案 0 :(得分:4)

您可以通过实例

将模型对象的实例传递给View()方法
public ActionResult Error()
{
    ErrorViewModel vm=new ErrorViewModel();
    vm.prop1="This is the error message";

    return View(vm);
}

答案 1 :(得分:1)

您甚至没有向视图提供错误对象。

    public ActionResult Error()
    {



        return View();
    }

答案 2 :(得分:1)

实际上这是一个很好的问题。您实际上不需要将有问题的模型传递给视图。您需要做的是确保设置了适当的过滤器。在MVC 4中,您可以在global.asax.cs中执行此操作:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
       filters.Add(new HandleErrorAttribute());
    }

确保在application_start中调用它:

    protected void Application_Start()
    {       
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        ModelBinders.Binders.DefaultBinder = new DevExpress.Web.Mvc.DevExpressEditorsBinder();
    }

现在您的HandleErrorInfo模型将被填充并自动传递到您的错误视图。