[英]Implement multiple section in layout.cshtml
假设我有一个名为“_Layout.cshtml”的部分布局,并且我有一个名为“Sidebar.cshtml”的侧边栏,它们都位于“/Views/Shared”中。 我有几个页面,例如登录、索引、帐户维护、管理课程等。我想让“Sidebar.cshtml”出现在“帐户维护.cshtml”和“管理 Course.cshtml”中,但“Index.cshtml” " 和 "Login.cshtml" 不应出现在 "Sidebar.cshtml" 中。
我已经测试在“_Layout.cshtml”中实现了@RenderSection
,但它没有渲染,我知道“_Layout.cshtml”是一个局部视图。 在这种情况下,我怎样才能实现我试图实现的假设。
图片说明:“Left Bar”标识为“Sidebar” P/S:.NET Core 的新功能
_Layout.cshtml 的代码
<div class="container">
<main role="main" class="pb-3">
@RenderSection("sidebar", false)
@RenderBody()
</main>
</div>
Sidebar.cshtml 的代码
@{
Layout = "_Layout.cshtml";
}
@section sidebar{
<nav class="col-md-2 d-none d-md-block bg-light sidebar">
<div class="sidebar-sticky">
<ul class="nav flex-column">
<li class="nav-item nav-link">
<img src="https://facebook.com/static/logo/cs_logo.png?v=1" class="rounded-circle" style="height: auto; max-width: 100%">
</li>
<li class="nav-item nav-link">
Role: <br><strong>22</strong>
</li>
<li class="nav-item nav-link">
Name:<br><strong>23qe</strong>
</li>
<li class="nav-item nav-link">
User ID:<br><strong>324eef</strong>
</li>
<li class="nav-item nav-link">
Last online:<br><strong>dsffsdf</strong>
</li>
</ul>
</div>
</nav>
}
问题是,sidebar.cshtml 正在定义部分。 如果您在 controller 中return View("sidebar.cshtml")
,这将是有意义的。 但是您想使用另一个视图从侧边栏获取内容,因此这些部分应该在另一个视图上定义,而不是在 sidebar.cshtml 中。
例如,您正在调用 Account/Maintenance,所以让 layout 定义部分,在这里我们需要提供内容来填充这些部分。
在 Views/Account/ Maintenance.cshtml中
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<span>Body text</span>
@section sidebar{
@{
await Html.RenderPartialAsync("~/Views/Shared/sidebar.cshtml");
}
}
在 Views/Shared/ Sidebar.cshtml 中只需提供内容:
<nav class="col-md-2 d-none d-md-block bg-light sidebar">
<div class="sidebar-sticky">
<ul class="nav flex-column">
<li class="nav-item nav-link">
<img src="https://facebook.com/static/logo/cs_logo.png?v=1" class="rounded-circle" style="height: auto; max-width: 100%">
</li>
<li class="nav-item nav-link">
Role: <br><strong>22</strong>
</li>
<li class="nav-item nav-link">
Name:<br><strong>23qe</strong>
</li>
<li class="nav-item nav-link">
User ID:<br><strong>324eef</strong>
</li>
<li class="nav-item nav-link">
Last online:<br><strong>dsffsdf</strong>
</li>
</ul>
</div>
</nav>
在AccountController中:
public IActionResult Maintenance()
{
return View();
}
因此,侧边栏将显示在维护中,因为视图为该部分提供内容并使用定义该部分的 _Layout。
_Layout.cshtml
<html>
<body>
<div class="container">
<main role="main" class="pb-3">
@RenderSection("sidebar", false)
@RenderBody()
</main>
</div>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.