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

本文关键字:对象 异常 视图 MVC | 更新日期: 2023-09-27 17:49:01

我有一个名为_News的局部视图,当它被自己调用时,它会像预期的那样工作。

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

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

抛出以下错误:

Object reference not set to an instance of an object

视图中的这行代码:

@foreach (var item in Model) {

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

控制器名为NewsController,位于Controllers中。视图名为_News,位于共享视图中。调用分部视图的视图是默认的主页/索引页。

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

如果您的部分需要访问模型中的数据,则需要将模型传递给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 -这让你调用一个控制器动作,并将结果呈现到当前视图

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

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

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

,那么当您需要提交表单时,这也将使模型绑定更加容易。