【问题标题】:How to render MVC child Action PartialView into Layout @RenderSection()?如何将 MVC 子 Action PartialView 渲染到 Layout @RenderSection() 中?
【发布时间】:2013-12-06 16:47:36
【问题描述】:

在布局中,MVC子动作被调用。但是,partialView 结果未显示在 RenderSection("userProfile", required:false) 中。不过,Watch 窗口显示结果包含数据。谢谢。

控制器的动作

    [ChildActionOnly]
    public ActionResult GetUserProfile()
    {
        var vm = base.appVM.User;
        return PartialView("UserProfilePartial", vm);
    }

UserProfilePartial.cshtml

@model myApp.viewModel

@section userProfile{

    <div>@string.Format("{0}, {1}", Model.lastName, Model.firstName)</div>

    @foreach (var item in Model.Locations)
    { 
        <div>
            <ul class="row">
                <li class="cell">@item.LocType</li>
                <li class="cell">@item.LocName</li>
                <li class="cell">@item.UserRole</li>
            </ul>
        </div>
    }
}

Layout.cshtml

   <body>
      <header>
        <div class="content-wrapper">
            <div class="float-left">
                <p class="site-title">@Html.ActionLink("Home", "Index", "Home")</p>
            </div>

            @Html.Action("GetUserProfile","User")
            <div class="float-right">

                @RenderSection("userProfile", required: false)

            </div>                       

            @Html.Action("Index", "Menu"); 
            <div class="menu">

                @RenderSection("menu", required:false)

            </div>
        </div>
    </header>

    @RenderBody()

  </body>

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    您不能在局部视图中使用部分。只有视图支持使用部分。部分视图仅用于显示内容,而不是指定功能可以执行的其他功能。有类似的线程,请查看here

    【讨论】:

      【解决方案2】:

      好吧,我就是这样做的

      在主 _ViewStart.cshtml 我把这段代码

      @{
          if (Request["Partial"] == null)
          {
              //return full view
              Layout = "~/Views/Shared/_Layout.cshtml";
          }
          else
          {
              //this will give just a partialview with the bodyContent
              Layout = "~/Views/Shared/_LayoutPartial.cshtml";
          }
      }
      

      然后我可以返回完整视图,它将根据部分请求返回视图 (href=http://www.d.com/account/login?=partial=partial)

      它只是工作!

      顺便说一下,您可以在部分布局部分和其他部分中添加 因为毕竟它只是一个常规布局

      【讨论】:

        【解决方案3】:

        主要问题是您正在渲染没有布局的局部视图。当您渲染局部视图时,它只会渲染您指定的代码,但是您创建了一个除了 Layout.cshtml 之外不会在任何地方渲染的部分,但是不会在任何地方调用布局。要解决此问题,您必须将布局代码添加到局部视图。

        @model myApp.viewModel
        
        @{
            Layout = "~/Views/Shared/Layout.cshtml";  // <---- adding the layout 
        }
        
        @section userProfile{
        
            <div>@string.Format("{0}, {1}", Model.lastName, Model.firstName)</div>
        
            @foreach (var item in Model.Locations)
            { 
                <div>
                    <ul class="row">
                        <li class="cell">@item.LocType</li>
                        <li class="cell">@item.LocName</li>
                        <li class="cell">@item.UserRole</li>
                    </ul>
                </div>
            }
        }
        

        考虑到这一点后,我认为您应该使用 @Html.Partial(""); 不是渲染部分。 看看这个链接,例如http://mvc4beginner.com/Tutorial/MVC-Partial-Views.html

        【讨论】:

        • 通过包含 @{Layout="~/Views/Shared/_Layout.cshtml";} 来创建堆栈溢出。我知道@Html.Partial() 会将片段插入到调用操作的行,但我希望它呈现在布局中@RenderSection("userProfile") 所在的行。
        • ...我想在部分视图中使用@section userProfile{}。
        猜你喜欢
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 2011-09-06
        • 2017-07-02
        • 1970-01-01
        相关资源
        最近更新 更多