2012-11-10 20 views
18

मैं एमवीसी 4 सीखना शुरू कर रहा हूं। मैं एक रेजर टेम्पलेट या एक मास्टर पेज के आधार पर एक दृश्य बनाने की दो संभावनाओं में आया था।एमवीसी लेआउट वीएस एमवीसी मास्टर पेज

मैं दो के बीच व्यावहारिक अंतर को समझना चाहता हूं।

अभी के लिए, मैं देख सकता हूं कि यदि मैं एक मास्टर पेज का उपयोग करके एक दृश्य बना देता हूं, तो मैं कई वर्गों को ओवरराइड कर सकता हूं। उदाहरण के लिए, यदि मेरा मास्टर "बाएं कॉलम" प्लेसहोल्डर और "बॉडी" प्लेसहोल्डर को परिभाषित करता है, तो मैं केवल विशिष्ट दृश्य के लिए शरीर को परिभाषित नहीं कर सकता, लेकिन मैं "बाएं कॉलम" अनुभाग में सामग्री भी प्रस्तुत कर सकता हूं उदाहरण के लिए नियंत्रण प्रदर्शित करने के लिए उस संदर्भ से बंधे हैं जिसमें पृष्ठ है (एक खोज बॉक्स से स्टॉक उद्धरण दर्शक तक)। इसके अलावा, मास्टर पेज को रेजर टेम्पलेट्स का उपयोग करके परिभाषित नहीं किया जा सकता है, जो अन्य वाक्यविन्यास की तुलना में बहुत कम वर्बोज़ हैं (आंशिक रूप से गलत: someone इस पहलू को हैक करने में कामयाब रहे)।

उस्तरा लेआउट के साथ

, मैं केवल एक पेज है कि विशिष्ट देखें द्वारा अधिरोहित जा सकता है से सटे ब्लॉक परिभाषित कर सकते हैं, और मैं एक से अधिक लेआउट (सूखी तोड़ने) पेज के अन्य भागों में थोड़ा परिवर्तन के लिए उपयोग करना चाहिए। क्या मेरा पिछला वक्तव्य सही है या क्या मुझे कुछ याद आ रहा है?

जाहिर है मैं jQuery का अच्छा इस्तेमाल करके पेज के किसी भी हिस्से में सामग्री प्रदान कर सकते हैं, लेकिन यह अलग बात

+1

एक रेजर लेआउट में आप एकाधिक 'सेक्शन' निर्धारित कर सकते हैं।आपको इस लेख को कैसे [लेआउट और सेक्शन] (http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor के बारे में पढ़ना चाहिए .aspx) रेजर में काम करते हैं। – nemesv

उत्तर

26

आप रेजर के साथ वर्गों इस्तेमाल कर सकते हैं है। स्कॉट गु यहाँ उनके बारे में ब्लॉग: http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

अपने लेआउट में के रूप में आप चाहते हैं आप के रूप में कई वर्गों को परिभाषित कर सकते हैं:

<div id="leftMenu"> 
    @RenderSection("LeftMenu", required: false) 
</div> 

जो आप अपने विचारों में रद्द कर सकते थे:

@section LeftMenu { 
    <div>... here comes the left menu for this view ...</div> 
} 

तुम भी कर सकते थे परीक्षण करें कि किसी अनुभाग को किसी दृश्य में परिभाषित किया गया है और यदि कुछ डिफ़ॉल्ट सामग्री प्रदान नहीं की जाती है:

@if (IsSectionDefined("LeftMenu")) { 
    @RenderSection("LeftMenu") 
} 
else { 
    <div>Some default left menu</div> 
} 
11

एमवीसी 3 से शुरू, रेज़र व्यू इंजन पेश किया गया था। एक उच्च स्तर पर, एक व्यू इंजन मूल रूप से दृश्य लेता है और आवश्यक HTML प्रस्तुत करता है। रेजर _layout फ़ाइल का उपयोग करता है और यह स्वयं का टेम्पलेट सिस्टम है जो मास्टर पेजों के समान है। हालांकि, एमवीसी 3 और 4 में एक और दृश्य इंजन है जिसे वेबफॉर्म व्यू इंजन कहा जाता है और वह मास्टर पेज का उपयोग करता है। यदि आप पुराने एमवीसी 1 और एमवीसी 2 ट्यूटोरियल देखते हैं तो आपको मास्टर पेज दिखाई देंगे, क्योंकि एमवीसी 3 से पहले केवल वेबफॉर्म इंजन देखते थे।

अब कार्यक्षमता के मामले में, दोनों समान हैं। मास्टर पेज आपको सामग्री स्थान धारकों को परिभाषित करने की अनुमति देते हैं, जबकि रेजर आपको अनुभागों को परिभाषित करने की अनुमति देता है। एक बड़ा अंतर यह होगा कि पृष्ठ कैसे प्रदान किया जाता है। मास्टर पेज उस पृष्ठ को बाहर प्रस्तुत करते हैं, जिसका अर्थ है मास्टर पेज, फिर सामग्री स्थान धारक। रेजर मुझे विश्वास है कि वह रिकर्सिव है और भीतर के सेक्शन से शुरू होता है और इसे वापस करने का काम करता है। उस्तरा लेआउट http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

संदर्भ में, जिनमें से एक पसंद किया जाता है, दोनों दृश्य इंजन मौजूद है के बारे में अधिक जानकारी के लिए इस ब्लॉग पोस्ट

चेक आउट, लेकिन अगर आप उस्तरा sytax (जो मेरी सशक्त अनुशंसा) ulitize करना चाहते हैं तो आपको लेआउट सिस्टम का उपयोग करना होगा। रेजर आपको मास्टर पेजों का उपयोग करने की अनुमति नहीं देता है।

+2

विस्तृत उत्तर के लिए धन्यवाद। – RayLoveless