假设我有一个名为UserDetails
的部分视图,其@model
子句设置为名为User
的模型类。
现在假设我有另一个看起来像这样的模型类:
public sealed class SpecialModel
{
public User SpecialUser;
public ... // other stuff
}
在SpecialModel
的视图中,我想调用上面提到的部分视图:
@model MyProject.Models.SpecialModel
@{ ViewBag.Title = "..."; }
<div class='user'>@Html.Partial("UserDetails", Model.SpecialUser)</div>
如果用户不是null
,这样可以正常。但是,如果用户是null
,我会收到此异常:
System.InvalidOperationException
:传入字典的模型项的类型为“MyProject.Models.SpecialModel”,但此字典需要“MyProject.Models.User”类型的模型项。
显然,异常消息是谎言。如何正确解决这个问题,以便我能正常通过null
?
答案 0 :(得分:18)
而不是
@Html.Partial("UserDetails", Model.SpecialUser)
写更详细的
@Html.Partial("UserDetails", new ViewDataDictionary(Model.SpecialUser))
这使得这个具体方案有效。
然而,它有一个缺点:它清除从控制器传递的所有信息。特别是,它清除所有验证信息;如果您要发布一些数据并且想要在该局部视图中显示验证错误消息,则无法使用此技术。