【问题标题】:Render PartialView from Controller从控制器渲染 PartialView
【发布时间】:2016-08-23 23:10:12
【问题描述】:

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?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

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

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

    假设您在~/Views/Shared 目录或~/Views/YourControllerFolderName 中有一个名为ucDropdown.cshtml 的局部视图,并且 ViewBag.Question 的类型为 List&lt;Question&gt; 或 IEnumerable&lt;Question&gt;

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2013-02-09
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多