我的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
始终为空。这是什么原因?
答案 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模型将被填充并自动传递到您的错误视图。