MVC局部视图中的空对象异常

时间:2012-12-21 07:03:47

标签: c# asp.net-mvc asp.net-mvc-4

我有一个名为_News的局部视图,当它自己调用时可以正常工作。

当我使用以下代码从另一个视图调用它时:

<div>
  @html.Partial("_News");
</div>

它抛出了这个错误:

Object reference not set to an instance of an object

在视图中的这行代码:

@foreach (var item in Model) {

视图引用模型的位置。我意识到这意味着视图没有从Controller传递模型,但我很困惑为什么。

Controller名为NewsController,位于Controllers中。视图称为_News,位于共享视图中。调用局部视图的视图是默认的主页/索引页面。

2 个答案:

答案 0 :(得分:3)

如果您的部分需要从模型访问数据,则需要将模型传递到Partial()方法:

@Html.Partial("_News", Model)

MSDN:http://msdn.microsoft.com/en-us/library/system.web.mvc.html.partialextensions.partial%28v=vs.108%29.aspx

修改

根据您的评论,我认为您实际上是在此之后:http://haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx - 这可以让您调用控制器操作并将结果呈现到当前视图中。

答案 1 :(得分:2)

可以您的部分模型是主视图模型的子集还是属性?我说可以因为,对于Tieson来说,你可以处理部分想要的模型与视图所需的模型之间几乎所有的差异......但是如果你的部分需要的模型到目前为止是完全不同的你的视图想要的模型然后我会经常把它当作一种可能的气味,我的两个模型没有彻底/正确地冲洗掉(基本上:“我试图在同一页面上代表太多的东西或不相关的东西吗?”)。 / p>

此外,如果你可以使你的局部模型成为主视图模型的属性,这样你就可以将模型传递给局部像:

@Html.Partial("_News", Model.SomePropertyThatFulfillsTheDataSourceOfThePartial)

然后,如果您需要提交表单,这将使模型绑定更容易。