如何为其模型调用“null”的部分视图?

时间:2012-02-15 11:52:51

标签: asp.net-mvc asp.net-mvc-3 partial-views

假设我有一个名为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

1 个答案:

答案 0 :(得分:18)

而不是

@Html.Partial("UserDetails", Model.SpecialUser)

写更详细的

@Html.Partial("UserDetails", new ViewDataDictionary(Model.SpecialUser))

这使得这个具体方案有效。

然而,它有一个缺点:它清除从控制器传递的所有信息。特别是,它清除所有验证信息;如果您要发布一些数据并且想要在该局部视图中显示验证错误消息,则无法使用此技术。