调用 MVC 错误的视图/模型
本文关键字:模型 视图 MVC 错误 调用 | 更新日期: 2023-09-27 18:35:49
我有一个 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上)
- 登录到应用程序(调用 LoginController 和 LoginModel,然后立即重定向到 HomeController/HomeModel)
- 点击退格键/后退按钮 -->用户返回登录页面
- 尝试使用错误的用户名/密码对再次登录。下正常情况下只会显示错误消息屏幕,但在这里我得到了例外。
在我看来,出于某种原因,mvc 正在调用 HomeController 的 Index.cstml,而不是IndexController
但是,在Chrome上,当我点击退格键时,我会自动重定向到HomeController
,而不是登录页面,因此无法重现它。原因是,显然chrome在点击退格键时会向LoginController发出额外的服务器请求,而这在FF和IE上根本不会发生;由于用户仍经过身份验证,因此我根据该额外请求将他重定向到HomeController;如果 FF 和 IE,在退格上发出那个请求,我也可以接受......
我强调该应用程序运行良好,除了这个退格方案,所以似乎没有任何严重的错误,如错别字或代码上调用的错误模型。
我调试了场景,但到目前为止找不到任何东西,没有调用家庭控制器,只是登录控制器,这应该重定向到它的 Index.cshtml....
传递到字典中的模型项类型为 softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel,但此字典需要类型为 softWrench.sW4.Web.Models.Home.HomeModel 的模型项。
此错误仅表示您在需要HomeModel
时通过LoginHandlerModel
。将模型传递到视图与绑定视图strongly type
最后,我可以修复它。在这里很难完全描述它,为此我很抱歉。
我忘了提到我有一个覆盖的 RazorViewEngine impl,它正在检查用户是否未经过身份验证以返回空的剃须刀模板。
但是,在我描述的场景中,用户仍然经过身份验证,因此,它返回了错误的剃须刀模板而不是 null。那个剃须刀模板(Layout.cshtml)是询问错误模型的罪魁祸首。
我对包含 SignIn 的视图路径进行了额外的检查,以返回 null,这涵盖了额外的情况。