【问题标题】:Null Object Exception in MVC Partial ViewMVC 部分视图中的空对象异常
【发布时间】:2012-12-08 18:33:56
【问题描述】:

我有一个名为 _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,位于共享视图中。调用局部视图的视图是默认的主页/索引页面。

【问题讨论】:

  • 这可能是因为您试图取消引用空引用。在您视图的代码中的某处。

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 嗨,它使用与调用它的视图完全不同的模型。它没有从自己的控制器中传递模型吗?
    • Partial() 方法不调用控制器动作,所以没有。
    • 是的,但最好将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多