Asp.net mvc 3 System.Web.Mvc.HandleErrorInfo型号错误

Asp.net mvc 3 System.Web.Mvc.HandleErrorInfo型号错误,asp.net-mvc-3,Asp.net Mvc 3,我创建了正确的模型类型,但不明白这是从哪里来的。有什么想法吗 System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Web.Mvc.HandleErrorInfo', but this dictionary requires a model item of type 'BusinessLogic.Models.ErrorCodeModel'. at Sy

我创建了正确的模型类型,但不明白这是从哪里来的。有什么想法吗

System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Web.Mvc.HandleErrorInfo', but this dictionary requires a model item of type 'BusinessLogic.Models.ErrorCodeModel'. at System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) at System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) at System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) at System.Web.Mvc.Controller.ExecuteCore() at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) at System.Web.Mvc.MvcHandler.c__DisplayClass6.c__DisplayClassb.b__5() at System.Web.Mvc.Async.AsyncResultWrapper.c__DisplayClass1.b__0() at System.Web.Mvc.MvcHandler.c__DisplayClasse.b__d() at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 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、对象实例) 在System.Web.Mvc.ViewResultBase.ExecuteSult(ControllerContext上下文)中 位于System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext ControllerContext,String actionName) 在System.Web.Mvc.Controller.ExecuteCore()上 在System.Web.Mvc.ControllerBase.Execute(RequestContext-RequestContext)中 在System.Web.Mvc.MvcHandler.c_uuudisplayClass6.c_uudisplayClassB.b_uu5()中 在System.Web.Mvc.Async.AsyncResultRapper.c__DisplayClass1.b__0()中 在System.Web.Mvc.MvcHandler.c_udisplayClasse.b_ud()中 在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()中 在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成) 在global.asax.cs中,我注册了一个自定义属性:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new Controllers.ExtendendHandleErrorAttribute()); } 公共静态无效注册表全局过滤器(全局过滤器集合过滤器) { filters.Add(新控制器.extendendHandlerRorAttribute()); } 定义如下:

public class ExtendendHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { LogErrors(filterContext); try { 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; } } catch(Exception ex) { new LogManager().Log("ExtendendHandleErrorAttribute error", ex); } } 公共类extendendHandlerRorAttribute:HandleErrorAttribute { 公共覆盖无效OneException(例外上下文筛选器上下文) { 日志错误(filterContext); 尝试 { base.OnException(filterContext); var typedResult=filterContext.Result作为ViewResult; if(typedResult!=null) { var tmpModel=typedResult.ViewData.Model; typedResult.ViewData=filterContext.Controller.ViewData; typedResult.ViewData.Model=CreateModel(filterContext); filterContext.Result=typedResult; } } 捕获(例外情况除外) { 新建LogManager().Log(“extendendHandlerRorAttribute错误”,ex); } } 有趣的是,我创建了ErrorCodeModel

private ErrorCodeModel CreateModel(ExceptionContext filterContext) { var model = new ErrorCodeModel(); if (filterContext.HttpContext.Session != null) { var session = filterContext.HttpContext.Session; model.SessionId = session.SessionID; StateHandler stateHandler = new StateHandler(session); model.FapiErrorCode = stateHandler.CustomErrorCode.ToString(); try { model.GlobalData = new GlobalDataBuilder(stateHandler).Build(); model.ErrorMessage = model.GlobalData.ErrorText.TechnicalError; } catch { } } return model; } 私有ErrorCodeModel CreateModel(上下文筛选器上下文除外) { var模型=新的ErrorCodeModel(); if(filterContext.HttpContext.Session!=null) { var session=filterContext.HttpContext.session; model.SessionId=session.SessionId; StateHandler StateHandler=新的StateHandler(会话); model.FapiErrorCode=stateHandler.CustomErrorCode.ToString(); 尝试 { model.GlobalData=新的GlobalDataBuilder(stateHandler.Build(); model.ErrorMessage=model.GlobalData.ErrorText.TechnicalError; } 捕获{} } 收益模型; } 我的Web.config

<customErrors mode="Off" defaultRedirect="Error"> <error statusCode="404" redirect="Error/FileNotFound" /> </customErrors>
在控制器或操作上使用
[HandleError]
属性时,引发的任何异常都将导致重定向到web.config所述的自定义错误页面。默认情况下,使用
HandleErrorInfo
模型将错误转到
~\Views\Shared\error.cshtml

web.config部分可能类似于:

<system.web>
  <customErrors mode="On" defaultRedirect="Error.aspx">
     <error statusCode="403" redirect="NoAccess.htm"/>
     <error statusCode="404" redirect="FileNotFound.htm"/>
  </customErrors>
</system.web>


~/Views/Shared/Error.cshtml中替换第一行:

@model System.Web.Mvc.HandleErrorInfo


请参见

能否简要说明您的场景、您试图实现的目标、您为实现该目标做了哪些工作以及哪些工作不起作用?好的,在最后一部分,您已经显示了错误消息。My error.cshtml中有一个自定义的@模型,我仍然会收到错误。还有其他想法吗?
@model BusinessLogic.Models.ErrorCodeModel