正在调用MVC错误的视图/模型

时间:2014-12-30 12:29:11

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

我的mvc4应用程序在常规方案中运行正常。

然而,根据我将描述的情况我得到了以下错误:

The model item passed into the dictionary is of type
softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel', but this dictionary
requires a model item of type 'softWrench.sW4.Web.Models.Home.HomeModel'.

重现它(仅限FF或IE)

  1. 登录到应用程序(调用LoginController和LoginModel,然后立即重定向到HomeController / HomeModel)
  2. 点击退格/后退按钮 - >用户返回登录页面
  3. 尝试使用错误的用户名/密码对再次登录。下 正常的环境,只会带来错误信息 屏幕,但在这里我得到了例外。
  4. 在我看来,由于某种原因,mvc正在调用HomeController的Index.cstml,而不是IndexController一个......

    但是,在Chrome上,当我点击退格键时,我会自动重定向到HomeController,而不是登录页面,因此无法重现它。原因是,显然chrome在命中退格时会对LoginController发出额外的服务器请求,而这在FF和IE上根本就不会发生;由于用户仍然经过身份验证,我会根据额外请求将他重定向到HomeController;如果FF和IE,在退格上做了那个请求我也可以用它...

    我强调应用程序运行正常,除了这个退格方案,因此似乎没有任何重大错误,例如错别字或错误的模型被调用代码。

    我调试了场景,但到目前为止找不到任何东西,HomeController没有被调用,只是LoginController,这应该重定向到它的Index.cshtml ....

2 个答案:

答案 0 :(得分:2)

  

传递到字典中的模型项的类型为softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel,但此字典需要类型为softWrench.sW4.Web.Models.Home.HomeModel的模型项。

此错误仅表示您需要LoginHandlerModel时传递HomeModel。将模型传递给视图strongly type绑定视图

之间存在不匹配

答案 1 :(得分:0)

最后,我可以解决它。在这里完全描述它有点难,为此我很抱歉。

我忘了提到我有一个RazorViewEngine的覆盖impl,它正在检查未经过身份验证的用户返回一个空的剃刀模板。

然而,在我描述的场景中,用户仍然经过身份验证,因此它返回了错误的剃刀模板而不是null。那个剃刀模板(Layout.cshtml)是问错模型的罪魁祸首。

我对包含SignIn的ViewPath进行了额外的检查,以便返回null并覆盖了额外的情况。