我已经能够找到关于在ASP.NET Core MVC 6中使用布局的信息,但不是针对这个特定的场景。我知道一个视图可以使用一个布局,而另一个视图可以使用不同的布局。
**一个视图可以使用两个布局吗?**例如,一个布局在顶部有一个水平导航栏,另一个布局在左侧有一个垂直导航栏,因此视图将同时显示顶部和左侧导航栏。我可能只是将.cshtml代码合并到第二个布局文件中,但我想知道我们是否可以简单地分配两个布局。
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" />
**注意:**正如你所看到的,我在一个页面中使用了两个布局,使用部分标记帮助器,我们可以在一个页面中使用多个布局。希望现在你可以满足你的要求,现在你知道这两种方式。
输出:
c6ubokkw2#
您可以创建两个不同的布局,然后通过条件语句在_ViewStart.cshtml中加载所需的布局。
@if (foo) { Layout = "_Layout-foo"; } else { Layout = "_Layout"; }
2条答案
按热度按时间wz1wpwve1#
一个视图可以使用两个布局吗?
直接回答你的问题,不,你不能这样做,事实上,你的特定视图对布局页面没有控制权,因为特定的页面通过使用@RenderBody()在布局页面中呈现
因此,@RenderBody()将显示您的视图页面,因为这将在您的布局页面中,所以没有直接的方法可以同时调用两个布局。
但是除了布局中的@RenderBody()之外,您可以在单个页面或视图中使用多个布局页面。
我知道有可能一个视图使用一种布局,而另一个视图使用另一种布局,但我想知道我们是否可以简单地分配两种布局。
根据您的场景和描述,你可以做的是,创建一个布局与其他几个secregated布局.换句话说,你可以在多个内容部分构建一个布局.
例如:你可以为hearder创建一个section,为footer创建另一个section等等,就像partial view所做的那样,使用@RenderSection()你可以合并它们。然后你可以在其中调用@RenderBody()。
**注:**具体执行情况请查看我们的官方文档。
除了上面的实现,你可以通过_ViewStart.cshtml页面或直接引用该页面使用不同的布局来呈现你的页面。
让我们假设您有以下布局页面:
因此,您可以执行以下操作:
直接定义您的页面:
或在_ViewStart.cshtml上写入条件:
在控制器中传递布局名称:
一旦你在ViewData[“page”]中传递了你的布局名称,你想要呈现的布局名称将在_ViewStart. cshtml中决定。
要点:
为了满足您的需求,您可以使用部分视图,然后在您希望显示视图页面的相同布局中呈现部分视图。这将是理想的解决方案。
解析您的场景:
让我们假设你有两个独立的布局,它们有自己的导航栏或任何东西的设计,现在你想把它们绑定在一个单一的视图页面,因此,你可以这样做:
现在,在视图页面中,您可以执行以下操作:
**注意:**正如你所看到的,我在一个页面中使用了两个布局,使用部分标记帮助器,我们可以在一个页面中使用多个布局。希望现在你可以满足你的要求,现在你知道这两种方式。
输出:
c6ubokkw2#
您可以创建两个不同的布局,然后通过条件语句在_ViewStart.cshtml中加载所需的布局。