RenderSection()在ASP.NETCore的tag-helper中工作吗< environment>?

qpgpyjmq  于 2023-08-08  发布在  .NET
关注(0)|答案(5)|浏览(174)

布局有这个:

<!DOCTYPE html>
<html>
<head>
  <environment names="Development">@RenderSection("devCss", required: false)</environment>
  <environment names="Staging,Production">@RenderSection("staproCss", required: false)</environment>
</head>
<body>
  @RenderBody()
  <environment names="Development">@RenderSection("devJs", required: false)</environment>
  <environment names="Staging,Production">@RenderSection("staproJs", required: false)</environment>
</body>
</html>

字符串
View有这个:

@section devCss { <link rel="stylesheet" href="foo.css" asp-append-version="true" /> }
@section staproCss { <link rel="stylesheet" href="foo.min.css" asp-append-version="true" /> }
@section devJs {}
@section staproJs {}

<h1>hello</h1>


RenderSection()<environment>标记之外时,一切正常。
在内部时,如上面的示例所示,它会失败,并出现无用的错误InvalidOperationException: The following sections have been defined but have not been rendered by the page at '_Layout.cshtml': 'staproCss, staproJs'. To ignore an unrendered section call IgnoreSection("sectionName").
这显然是没有意义的,因为所有部分都已定义。它抱怨一些人,而不是其他人。

<environment>标记助手是否允许RenderSection()在其中?

6xfqseft

6xfqseft1#

只需在</body>标签的末尾添加@RenderSection("Scripts", required: false)

bvjxkvbb

bvjxkvbb2#

这个答案是感谢@user2818985的评论。
未定义的环境将不会发出其中的内容。这意味着它不会发出RenderSection()调用。这意味着视图将定义一个不存在的section foo { ... }。失败的,也是例外。
为了实现我最初的目标,我更新了布局:

@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment _env
<!DOCTYPE html>
<html>
<head>
    <environment names="Development">
        @RenderSection("devCss", required: false)
    </environment>
    <environment names="Staging,Production">
        @RenderSection("staproCss", required: false)
    </environment>
    @if (_env.EnvironmentName == "Development" && IsSectionDefined("staproCss"))
    {
        IgnoreSection("staproCss"); 
    }
    @if (_env.EnvironmentName == "Staging,Production" && IsSectionDefined("devCss"))
    { 
        IgnoreSection("devCss"); 
    }
</head>
<body>
    @RenderBody()
    <environment names="Development">
        @RenderSection("devJs", required: false)
    </environment>
    <environment names="Staging,Production">
        @RenderSection("staproJs", required: false)
    </environment>
    @if (_env.EnvironmentName == "Development" && IsSectionDefined("staproJs")) 
    { 
        IgnoreSection("staproJs"); 
    }
    @if (_env.EnvironmentName == "Staging,Production" && IsSectionDefined("devJs")) 
    { 
        IgnoreSection("devJs"); 
    }
</body>
</html>

字符串
因此,始终定义了节,因此子视图永远不会抛出。

jrcvhitl

jrcvhitl3#

不可以,环境标记用于根据ASPNET_ENV环境变量定义的环境呈现不同的HTML。例如,与生产环境相比,开发环境可以使用不同的CSS定义集。
此链接可能也有帮助:A Complete Guide to the MVC 6 Tag Helpers
您可以在您的网站逻辑中使用环境变量值,如下所示。

的数据
有关详细信息,请参阅此链接:Working with Multiple Environments

zkure5ic

zkure5ic4#

发生这种情况是因为您有一个实现_Layout文件的视图,并且还实现了一个Scripts文件。
您只需要在</body>标记之前添加这一行。

@await RenderSectionAsync("Scripts", required: false)
</body>

字符串

sq1bmfud

sq1bmfud5#


视图在实现布局文件的同时实现的所有脚本和样式都需要添加其中一行

相关问题