什么是asp.net MVC中的@RenderSection


170

@RenderSection的目的是什么?它如何起作用?我了解捆绑软件的作用,但是我还没有弄清楚它的作用,这可能很重要。

@RenderSection("scripts", required: false)

也许是一个关于如何使用它的小例子?

Answers:


287

如果您有这样的_Layout.cshtml视图

<html>
    <body>
        @RenderBody()
        @RenderSection("scripts", required: false)
    </body>
</html>

那么您可以拥有一个index.cshtml这样的内容视图

@section scripts {
     <script type="text/javascript">alert('hello');</script>
}

要求表示使用页面布局的视图是否必须有一个脚本部分


20

如果

(1)您具有这样的_Layout.cshtml视图

<html>
    <body>
        @RenderBody()

    </body>
    <script type="text/javascript" src="~/lib/layout.js"></script>
    @RenderSection("scripts", required: false)
</html>

(2)您有Contacts.cshtml

@section Scripts{
    <script type="text/javascript" src="~/lib/contacts.js"></script>

}
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h2>    Contacts</h2>
    </div>
</div>

(3)您有About.cshtml

<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h2>    Contacts</h2>
    </div>
</div>

在布局页面上,如果需要设置为false“ @RenderSection(” scripts“,required:false)”,则当页面呈现且用户位于关于页面时,contacts.js不会呈现。

    <html>
        <body><div>About<div>             
        </body>
        <script type="text/javascript" src="~/lib/layout.js"></script>
    </html>

如果需要,则将其设置为true“ @RenderSection(” scripts“,required:true)”,当页面呈现且用户位于ABOUT页面上时,将呈现contacts.js。

<html>
    <body><div>About<div>             
    </body>
    <script type="text/javascript" src="~/lib/layout.js"></script>
    <script type="text/javascript" src="~/lib/contacts.js"></script>
</html>

简而言之,当设置为true时,无论是否需要在其他页面上,它将以任何方式呈现。如果设置为false,则仅在呈现子页面时才呈现。


16
这是不正确的。您应该自己尝试答案,并且会发现在将Section not defined: "scripts".所需的标志设置为时呈现“关于”页面时会得到一个提示true
cgijbels's

只是澄清一下。难道不是“脚本”而不是“脚本”吗?
SRIDHARAN

2

这里的Rendersection定义 MSDN

在布局页面中,呈现命名节的内容。MSDN

在_layout.cs页面中

@RenderSection("Bottom",false)

这里呈现bootom部分的内容,并指定falseboolean属性以指定是否需要该部分。

@section Bottom{
       This message form bottom.
}

这意味着,如果要在所有页面中都使用底部,则必须使用false作为Rendersection方法的第二个参数。


2

假设我有GetAllEmployees.cshtml

<h2>GetAllEmployees</h2>

<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
         // do something ...
    </thead>
    <tbody>
       // do something ...
    </tbody>
</table>

   //Added my custom scripts in the scripts sections

@section Scripts
    {
    <script src="~/js/customScripts.js"></script>
    }

还有另一个没有脚本的视图“ GetEmployeeDetails.cshtml”

<h2>GetEmployeeByDetails</h2>

@Model.PageTitle
<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
       // do something ... 
    </thead>
    <tbody>
       // do something ...
    </tbody>
</table>

我的布局页面“ _layout.cshtml”

@RenderSection("Scripts", required: true)

因此,当我导航到GetEmployeeDetails.cshtml时。我收到一个错误,即GetEmployeeDetails.cshtml中没有要呈现的部分脚本。如果我将标志@RenderSection()从更改required : true为``required:false`。这意味着呈现视图@section脚本中定义的脚本(如果存在),否则什么也不做。精致的方法将在_layout.cshtml中

@if (IsSectionDefined("Scripts"))
    {
        @RenderSection("Scripts", required: true)
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.