2012-10-26 12 views
108

एएसपी.नेट एमवीसी अनुप्रयोग के लिए, क्या कोई यह बता सकता है कि मैं कब और कब @section दृश्य में उपयोग करूंगा?एएसपी.नेट एमवीसी स्पष्टीकरण @ सेक्शन

मैंने this example में देखा, वह @section को index.cshtml में जोड़ता है। क्या index.cshtml एक साझा दृश्य है? उदाहरण के कोड में क्या कहा गया है "इस दृश्य में @section कोड का उपयोग करें, लेकिन यह नहीं देखें?"।

+4

इस ट्यूटोरियल पर एक नज़र डालें: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx –

+19

एक अच्छा सवाल बंद कर दिया ... फिर ... – Gudradain

+5

यह क्यों बंद करें? एक अच्छा सवाल है। – Alan

उत्तर

108

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

आपको Scott Gu's write up on this very interesting मिल सकता है।

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

जैसे

@RenderSection वाक्य रचना साझा दृश्य में चला जाता है,:

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

यह तो @Section वाक्य रचना के साथ अपने दृश्य में रखा जाएगा:

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

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

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

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

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

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

विभिन्न तरीकों से कर रहे हैं आप कुछ और this SO answer में उल्लेख के साथ इस सेटिंग को समायोजित कर सकते हैं।

+0

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

+0

अरे @ एबोगस मैंने जवाब अपडेट किया। उम्मीद है कि यह अतिरिक्त जानकारी उपयोगी है :) –

15

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

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

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

2

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

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

उम्मीद है कि इससे मदद मिलती है।

3

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

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

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

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

रास्ता viewstarts काम है कि एक ही निर्देशिका या बच्चे निर्देशिका के भीतर किसी भी cshtml फ़ाइल ViewStart चलने से पहले वह खुद को चलाता है।

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

+0

_ViewStart का अच्छा स्पष्टीकरण। –

संबंधित मुद्दे