ASP.NET MVC: @ सेट का उद्देश्य क्या है? [बन्द है]


132

ASP.NET MVC एप्लिकेशन के लिए, मैंने यह ब्लॉग लेख देखा । लेखक ScottGu Index.cshtml में जोड़ता @sectionहै।

मेरे पास कुछ प्रश्न हैं (ऊपर लेख का संदर्भ देते हुए):

  • क्या Index.cshtml एक साझा दृश्य है?
  • उदाहरण कोड @sectionएक विशेष दृश्य में कोड का उपयोग करता है । क्यों?

क्या कोई कृपया बता सकता है कि मैं @sectionएक दृश्य में क्यों और कब उपयोग करूंगा ?


4
इस ट्यूटोरियल को देखें: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti

1
हालांकि यह तर्क दिया जा सकता है कि आज बेहतर बंद करने का कारण "मुख्य रूप से राय-आधारित" होगा, फिर भी इसे बंद कर दिया जाएगा। वर्गों का उपयोग करने का कोई निश्चित तरीका नहीं है।
रिचर्ड

2
कुछ भी उपयोग करने का कोई निश्चित तरीका नहीं है। जरा देखिए कैसे लोग इंटरनेट का इस्तेमाल करते हैं ...
keji

जवाबों:


138

@sectionएक सामग्री को परिभाषित करने के लिए एक साझा दृश्य से ओवरराइड है। मूल रूप से, यह आपके लिए अपने साझा दृश्य (वेब ​​फॉर्म में मास्टर पृष्ठ के समान) को समायोजित करने का एक तरीका है।

आपको स्कॉट गु का लेखन बहुत दिलचस्प लग सकता है

संपादित करें: अतिरिक्त प्रश्न स्पष्टीकरण के आधार पर

@RenderSectionवाक्य रचना साझा देखें, इस तरह के रूप में चला जाता है:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

इसे तब @Sectionसिंटैक्स के साथ आपके विचार में रखा जाएगा :

@section Sidebar{
    <!-- Content Here -->
}

MVC3 + में या तो आप लेआउट फ़ाइल को सीधे दृश्य के लिए उपयोग करने के लिए परिभाषित कर सकते हैं या आप सभी दृश्यों के लिए एक डिफ़ॉल्ट दृश्य रख सकते हैं।

सामान्य दृश्य सेटिंग्स को _ViewStart.cshtml में सेट किया जा सकता है जो इस तरह के डिफ़ॉल्ट लेआउट दृश्य को परिभाषित करता है:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

आप फ़ाइल में सीधे उपयोग करने के लिए साझा दृश्य भी सेट कर सकते हैं, जैसे कि index.cshtml सीधे इस स्निपेट में दिखाया गया है।

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

इस SO उत्तर में कुछ और तरीकों से आप इस सेटिंग को समायोजित कर सकते हैं ।


धन्यवाद फ्रैजेल! मैंने उस ट्यूटोरियल के संदर्भ में अपने प्रश्न को और जोड़ दिया। क्या आप आगे बता सकते हैं? एक बार फिर धन्यवाद!
एक बोगस

अरे @ABogus I ने उत्तर को अपडेट किया। उम्मीद है कि यह अतिरिक्त जानकारी उपयोगी है :)
Frazell थॉमस

21

एक अच्छा उदाहरण जावास्क्रिप्ट है। आप चाहते हैं कि यह उस पृष्ठ के निचले भाग में हो जो ब्राउज़र में प्रदान किया गया है क्योंकि यह सबसे अच्छा अभ्यास है।

आप एक लेआउट / मास्टर पृष्ठ पर आधारित दृश्य से यह कैसे करेंगे जहां आप केवल पृष्ठ के मध्य तक पहुंच सकते हैं?

आप लेआउट पृष्ठ के नीचे एक लिपियों अनुभाग की घोषणा करके ऐसा करते हैं। फिर आप सामग्री जोड़ सकते हैं, इस मामले में जावास्क्रिप्ट शामिल हैं (मुझे आशा है!), आपके दृश्य पृष्ठ से आपके लेआउट पृष्ठ के नीचे तक।


4

जब आप किसी ऐसे प्लेसहोल्डर में रेंडर करने के लिए कोड / सामग्री चाहते हैं, जो किसी लेआउट पेज में परिभाषित किया गया हो, तो आप अनुभागों का उपयोग करना चाहते हैं।

आपके द्वारा लिंक किए गए विशिष्ट उदाहरण में, उसने _Layout.cshtml में रेंडरस्फेक्शन को परिभाषित किया है। कोई भी दृश्य जो उस लेआउट का उपयोग करता है, लेआउट में परिभाषित उसी नाम के @ सेट को परिभाषित कर सकता है, और यह लेआउट में रेंडरसेन कॉल को बदल देगा।

शायद आप सोच रहे होंगे कि हम कैसे जानते हैं Index.cshtml उस लेआउट का उपयोग करता है? यह MVC / रेजर सम्मेलन के एक बिट के कारण है। यदि आप उस संवाद को देखते हैं जहां वह दृश्य जोड़ रहा है, तो "लेआउट या मास्टर पृष्ठ का उपयोग करें" बॉक्स चेक किया गया है, और उसके ठीक नीचे लिखा है कि "खाली छोड़ दें यदि यह रेजर _viewstart फ़ाइल में सेट है"। यह दिखाया नहीं गया है, लेकिन उसके अंदर _ViewStart.cshtml फ़ाइल कोड है जैसे:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

जिस तरह से व्यूस्टार्ट्स काम करता है वह यह है कि उसी निर्देशिका या बाल निर्देशिकाओं के भीतर कोई भी cshtml फ़ाइल व्यूस्टार्ट को चलाने से पहले ही चल जाएगी।

जो हमें बताता है कि Index.cshtml Shared / _Layout.cshtml का उपयोग करता है।


_ViewStart की अच्छी व्याख्या।
ᴍᴀᴛᴛ ᴍᴀᴛᴛ

3

यह आपको @Sectionअपने टेम्पलेट में एक कोड को परिभाषित करने देता है जिसे आप अन्य फ़ाइलों में शामिल कर सकते हैं। उदाहरण के लिए, टेम्पलेट में परिभाषित एक साइडबार, अन्य शामिल दृश्य में संदर्भित किया जा सकता है।

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.