繁体   English   中英

在 layout.cshtml 中实现多个部分

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM