1

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

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

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

它抛出这个错误:

Object reference not set to an instance of an object

在视图中的这行代码处:

@foreach (var item in Model) {

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

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

4

2 回答 2

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 - 这使您可以调用控制器操作并将结果呈现为当前视图。

于 2012-12-21T07:07:19.073 回答
2

您的部分模型可以是主视图模型的子集或属性吗我说可以是因为,就 Tieson 而言,您可以处理部分想要的模型和视图想要的模型之间的几乎任何差异......但是如果您的部分想要的模型与您的视图想要的模型相差甚远,那么我通常会认为这可能是我的两个模型没有彻底/正确冲洗掉的可能气味(基本上:“我是否试图在同一页面上表示太多事物或不相关的事物?”)。

此外,如果您可以使您的局部模型成为主视图模型的属性,以便您可以将模型传递给局部,如下所示:

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

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

于 2012-12-21T07:28:26.637 回答