ASP.NET Core MVC 6中的一个视图可以使用两个布局吗?

fdbelqdn  于 2023-03-31  发布在  .NET
关注(0)|答案(2)|浏览(261)

我已经能够找到关于在ASP.NET Core MVC 6中使用布局的信息,但不是针对这个特定的场景。我知道一个视图可以使用一个布局,而另一个视图可以使用不同的布局。

**一个视图可以使用两个布局吗?**例如,一个布局在顶部有一个水平导航栏,另一个布局在左侧有一个垂直导航栏,因此视图将同时显示顶部和左侧导航栏。我可能只是将.cshtml代码合并到第二个布局文件中,但我想知道我们是否可以简单地分配两个布局。

wz1wpwve

wz1wpwve1#

一个视图可以使用两个布局吗?
直接回答你的问题,不,你不能这样做,事实上,你的特定视图对布局页面没有控制权,因为特定的页面通过使用@RenderBody()在布局页面中呈现
因此,@RenderBody()将显示您的视图页面,因为这将在您的布局页面中,所以没有直接的方法可以同时调用两个布局。
但是除了布局中的@RenderBody()之外,您可以在单个页面或视图中使用多个布局页面。
我知道有可能一个视图使用一种布局,而另一个视图使用另一种布局,但我想知道我们是否可以简单地分配两种布局。
根据您的场景和描述,你可以做的是,创建一个布局与其他几个secregated布局.换句话说,你可以在多个内容部分构建一个布局.
例如:你可以为hearder创建一个section,为footer创建另一个section等等,就像partial view所做的那样,使用@RenderSection()你可以合并它们。然后你可以在其中调用@RenderBody()。

**注:**具体执行情况请查看我们的官方文档。

除了上面的实现,你可以通过_ViewStart.cshtml页面或直接引用该页面使用不同的布局来呈现你的页面。
让我们假设您有以下布局页面:

因此,您可以执行以下操作:
直接定义您的页面:

@{
    Layout = "~/Views/Shared/_DirectSwitchLayout.cshtml";
}

<p>Directly Switching Layout Page.</p>

或在_ViewStart.cshtml上写入条件:

@{

    switch (ViewData["page"])
    {
        case "Admin":
            Layout = "_AdminLayout";
            break;
        case "Users":
            Layout = "_UserLayout";
            break;
        default:
            Layout = "_Layout";
            break;
    }
   
}

在控制器中传递布局名称:

public IActionResult Index()
        {
            ViewData["page"] = "Users";
            return View();
        }

一旦你在ViewData[“page”]中传递了你的布局名称,你想要呈现的布局名称将在_ViewStart. cshtml中决定。

要点:

为了满足您的需求,您可以使用部分视图,然后在您希望显示视图页面的相同布局中呈现部分视图。这将是理想的解决方案。

解析您的场景:

让我们假设你有两个独立的布局,它们有自己的导航栏或任何东西的设计,现在你想把它们绑定在一个单一的视图页面,因此,你可以这样做:

现在,在视图页面中,您可以执行以下操作:

<partial name="~/Views/Shared/_HeaderLayout.cshtml" /> 
<p>This your main page content.</p>
<partial name="~/Views/Shared/_FooterLayout.cshtml" />

**注意:**正如你所看到的,我在一个页面中使用了两个布局,使用部分标记帮助器,我们可以在一个页面中使用多个布局。希望现在你可以满足你的要求,现在你知道这两种方式。

输出:

c6ubokkw

c6ubokkw2#

您可以创建两个不同的布局,然后通过条件语句在_ViewStart.cshtml中加载所需的布局。

@if (foo)
{
    Layout = "_Layout-foo";
} else { 
    Layout = "_Layout";
}

相关问题