如何将MVC子动作部分视图渲染到布局@RenderSection()?

时间:2013-11-21 23:31:30

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

在布局中,调用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>

3 个答案:

答案 0 :(得分:0)

主要问题是您在没有布局的情况下渲染局部视图。渲染局部视图时,它只会渲染您指定的代码,但是您创建了一个除了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

答案 1 :(得分:0)

您无法在部分视图中使用部分。只有视图支持使用部分。部分视图仅用于显示不指定函数可以执行的其他功能的内容。有与之相关的类似线程,请查看here

答案 2 :(得分:0)

好的,我是怎么做的

在主_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

它只是有效!

通过添加部分布局部分和其他部分的方式 因为毕竟它只是一个常规的布局