我创建了正确的模型类型,并不明白它的来源.有任何想法吗?
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)
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new Controllers.ExtendendHandleErrorAttribute()); }
定义如下:
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); } }
这里有趣的是我创建了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; }
我的Web.config
<customErrors mode="Off" defaultRedirect="Error"> <error statusCode="404" redirect="Error/FileNotFound" /> </customErrors>
解决方法
原文地址:https://www.jb51.cc/aspnet/245094.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。