【发布时间】:2011-04-21 09:28:22
【问题描述】:
我创建了正确的模型类型,但不明白它的来源。有什么想法吗?
System.InvalidOperationException:传入字典的模型项的类型为“System.Web.Mvc.HandleErrorInfo”, 但是这个字典需要一个“BusinessLogic.Models.ErrorCodeModel”类型的模型项。 在 System.Web.Mvc.ViewDataDictionary`1.SetModel(对象值) 在 System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary 字典) 在 System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) 在 System.Web.Mvc.RazorView.RenderView(ViewContext viewContext,TextWriter writer,Object 实例) 在 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext 上下文) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext 控制器上下文,字符串 actionName) 在 System.Web.Mvc.Controller.ExecuteCore() 在 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 在 System.Web.Mvc.MvcHandler.c__DisplayClass6.c__DisplayClassb.b__5() 在 System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass1.b__0() 在 System.Web.Mvc.MvcHandler.c__DisplayClasse.b__d() 在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤,Boolean& completedSynchronously)在 global.asax.cs 中我注册了一个自定义属性:
公共静态无效RegisterGlobalFilters(GlobalFilterCollection过滤器) { filters.Add(new Controllers.ExtendendHandleErrorAttribute()); }定义如下:
公共类 ExtendendHandleErrorAttribute : HandleErrorAttribute { 公共覆盖无效 OnException(ExceptionContext filterContext) { 日志错误(过滤器上下文); 尝试 { base.OnException(filterContext); var typedResult = filterContext.Result as ViewResult; if (typedResult != null) { var tmpModel = typedResult.ViewData.Model; typedResult.ViewData = filterContext.Controller.ViewData; typedResult.ViewData.Model = CreateModel(filterContext); filterContext.Result = typedResult; } } 捕捉(异常前) { new LogManager().Log("ExtendendHandleErrorAttribute 错误", ex); } }有趣的是,我创建了 ErrorCodeModel。
私有 ErrorCodeModel CreateModel(ExceptionContext filterContext) { var model = new ErrorCodeModel(); if (filterContext.HttpContext.Session != null) { var session = filterContext.HttpContext.Session; 模型.SessionId = 会话.SessionID; StateHandler stateHandler = new StateHandler(session); model.FapiErrorCode = stateHandler.CustomErrorCode.ToString(); 尝试 { model.GlobalData = new GlobalDataBuilder(stateHandler).Build(); model.ErrorMessage = model.GlobalData.ErrorText.TechnicalError; } 抓住 { } } 返回模型; }我的 Web.config
【问题讨论】:
-
你能简要解释一下你的场景,你想要实现什么,你做了什么来实现它,什么没有奏效?好吧,对于最后一部分,您已经显示了错误消息。
标签: asp.net-mvc-3