मेरे पास रेजर का उपयोग करते हुए इसके दृश्य इंजन के रूप में एक एमवीसी 3 साइट है। मैं चाहता हूं कि मेरी साइट चमड़ी वाली हो। अधिकांश संभव खाल समान हैं जो एक साझा मास्टर लेआउट से प्राप्त कर सकते हैं।
इसलिए, मैं इस डिजाइन पर विचार कर रहा हूं:
हालांकि, मैं फोन करने के लिए सक्षम होने के लिए चाहते हैं RenderSection
, नीचे की परत में _Common.cshtml
,, और यह एक अनुभाग है कि शीर्ष स्तर में परिभाषित किया गया है प्रस्तुत करना है Detail.cshtml
। यह काम नहीं करता है: RenderSection
जाहिरा तौर पर केवल उन वर्गों को प्रस्तुत करता है जो अगली परत को परिभाषित करते हैं।
बेशक, मैं प्रत्येक त्वचा में प्रत्येक अनुभाग को परिभाषित कर सकता हूं। उदाहरण के लिए, यदि किसी खंड को परिभाषित _Common
करने की आवश्यकता है , तो मैं इसे प्रत्येक में रखता हूं और यह काम करता है:RenderSection("hd")
Detail
_Skin
@section hd {
@RenderSection("hd")
}
इसका परिणाम कोड के कुछ दोहराव में होता है (क्योंकि प्रत्येक त्वचा में अब यही खंड होना चाहिए) और आम तौर पर गड़बड़ महसूस होता है। मैं रेजर के लिए अभी भी नया हूं, और ऐसा लगता है कि मुझे कुछ स्पष्ट याद आ रहा है।
डिबगिंग करते समय, मैं WebViewPage.SectionWritersStack में परिभाषित वर्गों की पूरी सूची देख सकता हूं। अगर मैं सिर्फ देने से पहले पूरी सूची के माध्यम से देखने के लिए रेंडरसेन को बता सकता हूं, तो मुझे वह अनुभाग मिलेगा जिसकी मुझे आवश्यकता है। काश, SectionWritersStack गैर-सार्वजनिक है।
वैकल्पिक रूप से, यदि मैं लेआउट पृष्ठों के पदानुक्रम तक पहुँच सकता हूं और प्रत्येक अलग संदर्भ में रेंडरसेन के निष्पादन का प्रयास कर सकता हूं, तो मुझे उस अनुभाग का पता लग सकता है जिसकी मुझे आवश्यकता है। मुझे शायद कुछ याद आ रहा है, लेकिन मुझे ऐसा करने का कोई रास्ता नहीं दिख रहा है।
क्या इस लक्ष्य को पूरा करने का कोई तरीका है, उस पद्धति के अलावा जो मैंने पहले ही बताई है?