[英]MVC wrong view/model being called
我有一个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。
传递到字典中的模型项的类型为softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel,但是此字典需要一个类型为softWrench.sW4.Web.Models.Home.HomeModel的模型项。
此错误仅表示您需要HomeModel
时传递了LoginHandlerModel
。 将模型传递给视图和strongly type
绑定视图之间不匹配
最后,我可以修复它。 在这里很难完全描述它,对此,我很抱歉。
我忘了提到我有一个RazorViewEngine的重写的impl,它正在检查未通过身份验证的用户以返回空的剃刀模板。
但是,在我描述的场景中,用户仍然经过身份验证,因此,它返回了错误的剃刀模板而不是null。 那个剃刀模板(Layout.cshtml)是问错模型的罪魁祸首。
我对包含SignIn的ViewPath进行了额外检查,以返回null并覆盖了这种额外情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.