C# 如何创建子布局或使用固定HTML包装@RenderBody?
一些上下文:我目前正在将一个旧的.asp站点移植到asp.NET核心 在布局、视图组件和视图中拆分asp页面时,我注意到一些视图之间共享一些常见的包装html片段。我确定了三个不同的子布局,但我不想复制布局中所有页面上使用的部分 据我所知,ViewComponents无法在其标记内呈现动态代码 有没有办法定义这样的事情:C# 如何创建子布局或使用固定HTML包装@RenderBody?,c#,asp.net,asp.net-core-mvc,C#,Asp.net,Asp.net Core Mvc,一些上下文:我目前正在将一个旧的.asp站点移植到asp.NET核心 在布局、视图组件和视图中拆分asp页面时,我注意到一些视图之间共享一些常见的包装html片段。我确定了三个不同的子布局,但我不想复制布局中所有页面上使用的部分 据我所知,ViewComponents无法在其标记内呈现动态代码 有没有办法定义这样的事情: @{ Layout = "_Layout"; } <!-- my view code --> _布局 <html><head>...<
@{ Layout = "_Layout"; }
<!-- my view code -->
_布局
<html><head>...</head>
<body>@RenderSubLayout("_subLayoutName.cshtml")</body>
</html>
_subLayoutName.cshtml
<div class="outer">
<div class="inner">
@RenderBody()
</div>
</div>
@RenderBody在何处呈现由操作决定的视图?我不知道ASP.NET核心,但在.NET framework中,您可以使用不同的母版页。只需在~/Views/Shared/folder中创建两个不同的布局,然后在页面顶部页眉的每个页面上设置所需的布局:
@{
Layout = "~/Views/Shared/_LayoutPage1.cshtml"
}
下面是一个链接,例如:我不知道ASP.NET核心,但在.NET framework中,您可以使用不同的母版页。只需在~/Views/Shared/folder中创建两个不同的布局,然后在页面顶部页眉的每个页面上设置所需的布局:
@{
Layout = "~/Views/Shared/_LayoutPage1.cshtml"
}
这里有一个链接,例如:布局是视图,视图是布局。它主要是关于如何使用它,尽管当您使用视图作为布局时,会有一些功能上的差异。关键在于,正如视图可以引用布局一样,布局也可以引用布局。例如,你习惯于看到这样的东西:
@{ Layout = "_Layout"; }
<!-- my view code -->
这将是一个基于RenderBody的布局,它本身使用一个布局,这意味着渲染此布局的结果将转储到指定的布局中,并在其中调用RenderBody
根据您的示例:
_Layout.cshtml
换句话说,您通过实际呈现一个Foo节来定义Foo节。然后,该部分将由视图定义,漏斗状地返回到基本布局。布局是视图,视图是布局。它主要是关于如何使用它,尽管当您使用视图作为布局时,会有一些功能上的差异。关键在于,正如视图可以引用布局一样,布局也可以引用布局。例如,你习惯于看到这样的东西:
@{ Layout = "_Layout"; }
<!-- my view code -->
这将是一个基于RenderBody的布局,它本身使用一个布局,这意味着渲染此布局的结果将转储到指定的布局中,并在其中调用RenderBody
根据您的示例:
_Layout.cshtml
换句话说,您通过实际呈现一个Foo节来定义Foo节。然后,该部分将由视图定义,并返回到基本布局。这正是我不想做的事情,因为一个主要部分或结果布局将具有相同的头部部分和视图组件。我不想复制那部分哦,现在我明白了!嗯,不管怎样,你已经有了正确的答案,顺便说一下,克里斯·普拉特的答案对我也很有用。祝你好运这正是我不想做的事情,因为一个主要部分或产生的布局将具有相同的头部部分和视图组件。我不想复制那部分哦,现在我明白了!嗯,不管怎样,你已经有了正确的答案,顺便说一下,克里斯·普拉特的答案对我也很有用。祝你好运
@{ Layout = "_SubLayoutName"; }
<p>This is my view!</p>
<html>
<head>...</head>
<body>
<div class="outer">
<div class="inner">
<p>This is my view!</p>
</div>
</div>
</body>
</html>
@section Foo
{
@RenderSection("Foo")
}