MVC4局部视图错误 "对象引用未设置为对象实例。"

3

首先我是一个完全的MVC新手。如果某个布尔字段为true,我怎样才能在事件表中从数据库中显示数据于局部视图中。

这是我的局部视图:

@model IEnumerable<TheBigEvent.Models.RecommendedEvents>
<table>
 <tr>

  <td>  
     @Html.DisplayNameFor(model => model.Event_Name)
      </td>
      <td>
      @Html.DisplayNameFor(model => model.Event_Date)

   </td>
  </tr>

 <tr>   

      @foreach (var item in Model) {

          <td>  

    @Html.DisplayFor(modelItem => item.Event_Name)
</td>
     <td>
    @Html.DisplayFor(modelItem => item.Event_Date)
         </td>
     }

 </tr>                          
   </table>

这是我的控制器

public ActionResult _RecommendedEvents()

    {


        var recommendedevents = from Events in db.Database1
                                select Events;

        recommendedevents = recommendedevents.Where(s => s.Recommended.Equals(true));

        return PartialView("_RecommendEvents", recommendedevents);


    }

显示局部视图的代码

 @Html.Partial("_RecommmndedEvents")

这是我收到的错误信息: enter image description here 【编辑】
 public ActionResult _RecommendedEvents(RecommendedEvents model)

    {

        model = new RecommendedEvents();


        var recommendedevents = from Events in db.Database1
                                select Events;


        recommendedevents = recommendedevents.Where(s => s.Recommended.Equals(true));








        return View(model);


    }
4个回答

2
@{
        Html.RenderAction("view","controller")
}

这将前往指定的控制器和操作,该操作必须返回一个带有正确模型的部分视图。

1

对象引用未设置为对象实例一直是我使用未初始化列表的问题。在设置之前,请尝试初始化recommendedevents。类似于:

List<Events> recommendedevents = new List<Events>();

将Events替换为实际的类型。

Html.Partial中的第一个参数是部分视图的名称而不是方法调用。你需要通过视图模型将模型传递给视图并将其传递给部分视图。

@Html.Partial("_RecommendedEvents", Model.Events)

或者通过ajax调用加载部分内容。请参阅我的答案,这里有一个示例如何使用AJAX渲染部分表单元素

0

@HTML.Partial()函数不通过任何控制器动作来渲染,它只在文档中的那个位置渲染视图的HTML。而且你没有将IEnumerable<TheBigEvent.Models.RecommendedEvents>传递给该部分视图,所以当该部分视图渲染时,Model为空。

IEnumerable<TheBigEvent.Models.RecommendedEvents>对象放入主页的视图模型中,或者可能放在ViewBag的某个属性上,并在调用Partial方法时将其传递给部分视图:

@HTML.Partial("_RecommmndedEvents", ViewBag.RecommendedEvents)

在顶级页面的控制器动作中,像你在上面的控制器代码中实例化它一样设置ViewBag.RecommendedEvents


好的,所以我已经在视图中放置了@model IEnumerable<TheBigEvent.Models.RecommendedEvents>,并将模型添加到部分视图中作为@Html.Partial("_RecommendedEvents", Model); 但它仍然显示相同的错误。 - Conor O'Hanlon
你是否在顶级控制器操作中实例化它?你在问题中发布的操作没有被执行,所以你需要调用那个repo代码并将该对象作为模型传递给顶层视图。将该控制器操作作为问题的编辑发布。 - Graham
你在那个操作中实例化了 model 变量,并且没有以任何方式更改它就返回了它。我怀疑这是不正确的。你是不是想要 return View(recommendedevents); - Graham
我现在已经让部分视图正常工作了。唯一的问题是,这个部分视图在布局视图上。我可以通过调用_RecommendedEvents()来访问我的索引页面,但现在的问题是,当我点击另一个页面时,它会返回错误。有什么建议吗? - Conor O'Hanlon
如果这个部分被挂接到你的Layout视图中,那意味着你需要将List<RecommendedEvents>附加到应用中的每一个操作。我建议你为此再打开另一个问题。 - Graham
显示剩余3条评论

0
错误意味着您的模型为空, 当您使用Ajax时,请使用PartialView(),否则您可以按如下方式编写代码:
return View("_RecommendEvents", recommendedevents);

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