如何调用一个带有“null”模型的部分视图?

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

19

不要使用

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

写得更冗长

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

这使得这个特定场景能够工作。

然而,它也有一个不利之处:它清除了从控制器传递过来的所有信息。尤其是,它清除了所有验证信息;如果您正在发布一些数据,并且想在那个局部视图中显示验证错误消息,您不能使用这种技术。


以下解决方案在这里克服了缺点! - Mojtaba
这在dotnet core 2 / mvc 2.0.3中不再起作用。但我找到了一个解决方案。 - Jay
是的,它清除了所有验证信息和您的 ViewBag。"除此之外,林肯夫人,你觉得这场戏怎么样?" - Tom Baxter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接