2016-08-23 172 views
0

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?

回答

2

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

因此,在您的主视图中,您可以使用Html.Partial帮助程序方法遍历问题并调用局部视图。

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

假设你有一个局部视图,在任一~/Views/Shared目录或~/Views/YourControllerFolderNameViewBag.Question称为ucDropdown.cshtmlList<Question>型或IEnumerable<Question>

确保您的局部视图ucDropdown.cshtml是强类型到Question类型的

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

由于您正在传递问题对象目录真正地查看(强类型的方法),你不需要ViewBag。您可以在局部视图中简单访问Model.AnyPropertyName

相关问题