2012-02-15 51 views
7

假设我有一个称为UserDetails的局部视图,其@model子句设置为名为User的模型类。如何使用“null”为其模型调用分部视图?

现在假设我有一个看起来像这样的另一个模型类:

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

回答

18

而不是

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

写的更详细的

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

这使得这种特定情况下工作。

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

+0

下面的解决方案[这里](http://stackoverflow.com/a/12037580/649497)克服了缺点! – Mojtaba 2016-06-01 16:24:41

相关问题