【问题标题】:Getting a null exception as model in razor在剃刀中获取空异常作为模型
【发布时间】:2013-06-11 08:53:01
【问题描述】:

我的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 始终为空。这是什么原因?

【问题讨论】:

  • 如何显示视图?
  • 提供控制器动作代码
  • 更具体地说,您的模型在控制器中的哪个位置填充并分配给视图?
  • 请提供您的控制器操作方法代码。或者你可以做这样的事情。prideparrot.com/blog/archive/2012/5/…
  • 假设这是 Error 操作,您没有将模型传递给您的视图。你如何期望模型是任何东西为空?

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


【解决方案1】:

您可以通过实例将模型对象的实例传递给 View() 方法

public ActionResult Error()
{
    ErrorViewModel vm=new ErrorViewModel();
    vm.prop1="This is the error message";

    return View(vm);
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 您的示例代码是显示修复还是显示问题?
    【解决方案3】:

    其实这是一个很好的问题。您实际上并不需要将有问题的模型传递给视图。您需要做的是确保设置了适当的过滤器。在 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 模型将自动填充并传递到您的错误视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 2012-10-03
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多