asp.net-mvc-3 – System.Web.Mvc.HandleErrorInfo错误的模型类型
发布时间:2020-08-02 00:14:45 所属栏目:asp.Net 来源:互联网
导读:我创建了正确的模型类型,并不明白它的来源.有任何想法吗? System.InvalidOperationException: The model item passed into the dictionary is of type System.Web.Mvc.HandleErrorInfo, but this dictionary requires a model item of typ
|
我创建了正确的模型类型,并不明白它的来源.有任何想法吗? 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) 在global.asax.cs中我注册了一个自定义属性:
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>
解决方法在/ Views / Shared / Error.cshtml中替换第一行:@model System.Web.Mvc.HandleErrorInfo 同 @model BusinessLogic.Models.ErrorCodeModel (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET中的超链接控件和链接控件有什么区别?
- asp.net中mvc使用ajax提交参数的匹配问题解决探讨
- asp.net – 使用/ signalr / ping调用时使用长轮询
- asp.net-mvc – 如何与NopCommerce MVC合作
- asp.net – Request.Url.AbsoluteUri和重写的URL
- asp.net – 当我试图强制401时,自定义授权过滤器总是返回40
- asp.net – IIS Express(WebMatrix)打开外部连接
- ASP.NET 2.0或3.5?
- 在asp.net中HttpContext.Current.User和Thread.CurrentPrin
- Asp.NetCore1.1版本去掉project.json后如何打包生成跨平台包
推荐文章
站长推荐
热点阅读
