从Controller渲染PartialView

时间:2016-08-23 14:59:14

标签: c# asp.net-mvc

HomeController>索引操作执行选择查询。对于该选择查询中的每一行,我需要在“索引”视图中呈现部分视图。由于这取决于数据库,我从控制器执行这部分代码。我搜索了很多,但我无法弄清楚如何从控制器渲染PartialView。

  1. 部分视图是否需要控制器操作?我对此并不确定,但这就是我创造的:

    public PartialViewResult ucDropdown(Question question)
    {
        ViewBag.Question = question;
        return PartialView();
    }
    
  2. 在我的主视图中,如何调用此局部视图?我(尝试失败)尝试过:

    public ActionResult Index(string id = "")
    {
        var q = ......
        var ctrls = new ControlsController();
        ViewBag.Questions = ctrls.ucDropdown(q);
        return View();
    }
    
  3. 如何访问此局部视图的ViewBag?

1 个答案:

答案 0 :(得分:2)

您不一定需要一个动作方法来渲染局部视图。您可以直接在主视图中调用局部视图,并直接传递Question对象。

因此,在主视图中,您可以循环搜索问题并使用Html.Partial辅助方法调用局部视图。

@foreach(var item in (List<Question>)ViewBag.Questions)
{
  @Html.Partial("ucDropdown",item)
}

假设您在ucDropdown.cshtml目录或~/Views/Shared中有一个名为~/Views/YourControllerFolderName的部分视图,  ViewBag.Question的类型为List<Question>IEnumerable<Question>

确保您的部分视图ucDropdown.cshtml被强类型为Question类型

@model Question
<p>@Model.QuestionId</p>

由于您将问题对象直接传递给视图(强类型方法),因此您不需要ViewBag。您只需在局部视图中访问Model.AnyPropertyName即可。