如何将 MVC 子 Action PartialView 渲染到 Layout @RenderSection() 中?
Posted
技术标签:
【中文标题】如何将 MVC 子 Action PartialView 渲染到 Layout @RenderSection() 中?【英文标题】:How to render MVC child Action PartialView into 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>
【问题讨论】:
【参考方案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。以上是关于如何将 MVC 子 Action PartialView 渲染到 Layout @RenderSection() 中?的主要内容,如果未能解决你的问题,请参考以下文章
就 MVC 模式而言,Struts 2 中使用的 Action 是啥?
asp.net mvc 如何将controller 里一个action 返回值为list<>的值输出到view
如何在 asp.net MVC 中使用 RedirectToAction 将模型从一个 Action 方法传递到另一个?尽管我发送了一个填充模型,但我得到的是空模型
如何使用 Jquery AJAX 调用 MVC Action 然后在 MVC 中提交表单?