Asp.net MVC में @RenderSection क्या है


170

@RenderSection का उद्देश्य क्या है और यह कैसे कार्य करता है? मैं समझता हूं कि बंडल क्या करते हैं, लेकिन मुझे अभी तक यह पता लगाना है कि यह क्या करता है और यह संभवतः महत्वपूर्ण है।

@RenderSection("scripts", required: false)

शायद इसका उपयोग कैसे करें पर एक छोटा सा उदाहरण?

जवाबों:


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) आपके पास इस तरह एक _Loutout.shtml दृश्य है

<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>

यदि आप आवश्यक हैं, तो लेआउट पृष्ठ पर, यदि गलत "@ रेंडरसेक्शन (" स्क्रिप्ट्स ", आवश्यक: गलत) पर सेट है," जब पृष्ठ रेंडर करता है और उपयोगकर्ता पेज के बारे में होता है, तो contacts.js रेंडर नहीं करता है।

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

यदि आवश्यक हो तो "@RenderSection (" स्क्रिप्ट्स ", आवश्यक: सत्य)" "पर सेट होता है, जब पेज रेंडरर्स और उपयोगकर्ता ABOUT पेज पर होता है, तो contacts.js STILL रेंडर हो जाता है।

<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>

SHORT में, जब यह सही है , तो आपको इसकी आवश्यकता है या नहीं, अन्य पृष्ठों पर, यह किसी भी तरह प्रदान किया जाएगा। यदि इसे गलत पर सेट किया जाता है , तो यह केवल तभी प्रस्तुत किया जाएगा जब बाल पृष्ठ प्रस्तुत किया जाएगा।


16
यह सही नहीं है। आपको अपना उत्तर स्वयं देने का प्रयास करना चाहिए और आपको यह ध्यान देना होगा कि Section not defined: "scripts".आवश्यक ध्वज को सेट करते समय आपको अपने बारे में पृष्ठ प्रस्तुत करना होगा true
cgijbels

सिर्फ एक स्पष्टीकरण। क्या यह "लिपियों" के बजाय "स्क्रिप्ट" नहीं होना चाहिए?
श्रीधरन

2

यहाँ रेंडरनेशन से बचाव MSDN

लेआउट पृष्ठों में, एक नामित अनुभाग की सामग्री को प्रस्तुत करता है। MSDN

_Layout.cs पेज में

@RenderSection("Bottom",false)

यहां बूटोम सेक्शन की सामग्री को प्रस्तुत करना और यह निर्दिष्ट करने के लिए falseबूलियन संपत्ति निर्दिष्ट करता है कि क्या अनुभाग की आवश्यकता है या नहीं।

@section Bottom{
       This message form bottom.
}

इसका अर्थ है कि यदि आप सभी पृष्ठों में अनुभाग को नीचे करना चाहते हैं, तो आपको रेंडर करने की विधि में दूसरे पैरामीटर के रूप में गलत का उपयोग करना होगा।


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)

So, when I navigate to GetEmployeeDetails.cshtml. I get the error that there is no section scripts to be rendered in GetEmployeeDetails.cshtml. If I change the flag in @RenderSection() from required : true to ``required : false`. It means render the scripts defined in the @section scripts of the views if present.Else, do nothing. And the refined approach would be in _layout.cshtml

@if (IsSectionDefined("Scripts"))
    {
        @RenderSection("Scripts", required: true)
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.