HomeController>索引操作执行选择查询。对于该选择查询中的每一行,我需要在“索引”视图中呈现部分视图。由于这取决于数据库,我从控制器执行这部分代码。我搜索了很多,但我无法弄清楚如何从控制器渲染PartialView。
部分视图是否需要控制器操作?我对此并不确定,但这就是我创造的:
public PartialViewResult ucDropdown(Question question)
{
ViewBag.Question = question;
return PartialView();
}
在我的主视图中,如何调用此局部视图?我(尝试失败)尝试过:
public ActionResult Index(string id = "")
{
var q = ......
var ctrls = new ControlsController();
ViewBag.Questions = ctrls.ucDropdown(q);
return View();
}
如何访问此局部视图的ViewBag?
答案 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
即可。