【问题标题】:The model item passed into the dictionary is of type 'System.Web.Mvc.HandleErrorInfo', but this dictionary requires a model item of type传入字典的模型项的类型为“System.Web.Mvc.HandleErrorInfo”,但此字典需要类型的模型项
【发布时间】:2013-10-18 06:59:52
【问题描述】:

每当我的应用程序发生错误时,我都无法在事件查看器中查看正确的错误。在它的地方我得到以下错误......

传入字典的模型项是“System.Web.Mvc.HandleErrorInfo”类型的,但该字典需要一个“LayoutPageViewModel”类型的模型项

我明白为什么会发生此错误(因为控制器试图将 HandleErrorInfo 类型的模型传递给原始视图)但我不知道如何阻止此错误显示在事件查看器中并显示真实的错误。

所以事件的顺序是:

  1. 应用程序出现异常
  2. 默认错误处理尝试将“System.Web.Mvc.HandleErrorInfo”类型的模型传递到默认布局页面,该页面接受“LayoutPageViewModel”模型
  3. 应用程序中出现另一个异常,因为布局正在传递一个“HandleErrorInfo”类型的模型
  4. 自定义错误 500 页面(在 web.config 中指定)被命中,它不引用任何布局:

    @{ Layout = null; }
    
  5. 错误页面显示正确,但事件查看器中的异常不正确。

我尝试在 Application_Start 中设置 HandleErrorAttribute 过滤器的主视图和视图,但这会阻止在事件日志中注册的任何内容。我还尝试将以下方法添加到控制器中...

protected override void OnException(ExceptionContext filterContext)
{
    filterContext.Result = new ViewResult {
        ViewName = "~/Views/Shared/Error.cshtml",                
    };
}

但这与 HandleErrorAttribute 解决方法的结果相同。

有人知道我可以如何解决这个问题吗?

【问题讨论】:

  • 你看到这个答案了吗? stackoverflow.com/questions/812235/…
  • 是的,我已经尝试过了,但它没有重定向到我的自定义错误 500 页面,也没有将警告记录到事件日志中。

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


【解决方案1】:

我处理该问题的解决方案是删除布局页面顶部的 @model 指令,然后在我通常希望看到我的模型在可能传入的不同模型之间切换的地方进行一些检查例如

@if (Model is System.Web.Mvc.HandleErrorInfo)
{
    <title>Error</title>
}
else if (Model.GetType() == typeof(MyApp.Models.LayoutPageViewModel))
{
    <meta name="description" content="@Model.PageMetaDescription">
    <title>@Model.PageTitleComplete</title>
}

【讨论】:

    【解决方案2】:

    听起来您遇到了次要错误,这使得最终结果成为基于类型的问题。

    在尝试其他处理异常的方法之前,会先查看您显示异常的方式。

    你怎么知道第一次点击了正确的错误页面?

    错误页面包含哪些内容,还有什么会触发错误吗?

    知道你说错误页面没有对布局页面的引用。将仔细检查这是否实际被使用,而不仅仅是在第二个实例中被调用,交替从 main 中删除布局以确保。

    确保您的错误页面始终有自己的简化布局页面,这样就不会有由于强类型布局/母版页面而导致出现与您的类似错误的风险。

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2015-09-27
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多