我的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)
在我看来,由于某种原因,mvc正在调用HomeController的Index.cstml,而不是IndexController
一个......
但是,在Chrome上,当我点击退格键时,我会自动重定向到HomeController
,而不是登录页面,因此无法重现它。原因是,显然chrome在命中退格时会对LoginController发出额外的服务器请求,而这在FF和IE上根本就不会发生;由于用户仍然经过身份验证,我会根据额外请求将他重定向到HomeController;如果FF和IE,在退格上做了那个请求我也可以用它...
我强调应用程序运行正常,除了这个退格方案,因此似乎没有任何重大错误,例如错别字或错误的模型被调用代码。
我调试了场景,但到目前为止找不到任何东西,HomeController没有被调用,只是LoginController,这应该重定向到它的Index.cshtml ....
答案 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并覆盖了额外的情况。