_Viewstart.cshtml और आंशिक रेजर विचारों का उपयोग करने का सही तरीका?


156

मैं _viewstart.cshtml का उपयोग अपने विचारों के लिए एक ही रेजर लेआउट को स्वचालित रूप से असाइन करने के लिए कर रहा हूं ।

यह इस तरह दिखता है कि मेरे दृश्य फ़ोल्डर की जड़ में एक मृत सरल फ़ाइल है:

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

यह हर एक दृश्य में @Layout निर्देश जोड़ने की तुलना में अधिक DRY है।

हालाँकि, यह रेजर आंशिक विचारों के लिए एक समस्या बन जाता है , क्योंकि वे _viewstart.cshtml की सामग्री चलाते हैं और इसलिए गलत तरीके से खुद को एक लेआउट असाइन करते हैं, जो उन्हें, उम, अब आंशिक नहीं बनाता है।

यहाँ एक काल्पनिक परियोजना है, जिसमें _viewstart.cshtml फ़ाइल, साझा _layout.shtml फ़ाइल और एक आंशिक दृश्य ("AnonBar.cshtml") दिखा रहा है।

उदाहरण परियोजना संरचना

वर्तमान में, जिस तरह से मैं इसके आसपास हो रहा हूं वह निम्नलिखित लाइन को प्रत्येक आंशिक दृश्य में जोड़कर है:

@{
    Layout = "";
}

यह रेजर में एक आंशिक के रूप में एक दृश्य को दर्शाने का गलत तरीका लगता है। (ध्यान दें कि वेब प्रपत्र दृश्य इंजन के विपरीत, फ़ाइल एक्सटेंशन आंशिक विचारों के लिए समान है।)

अन्य विकल्प जिन पर मैंने विचार किया लेकिन वे और भी बुरे हैं:

  • सभी आंशिक विचारों को एक सामान्य फ़ोल्डर में रखना, ताकि वे एक सामान्य _viewstart.cshtml साझा कर सकें। यह उनके नियंत्रक के रूप में एक ही फ़ोल्डर में होने वाले विचारों के सम्मेलन को तोड़ देता है।
  • आंशिक विचारों का उपयोग नहीं करना।

क्या यह कुछ ऐसा है जो अभी भी रेज़र व्यू इंजन टीम द्वारा दूर किया जा रहा है, या क्या मुझे एक मौलिक अवधारणा याद आ रही है?


3
ऑफटॉपिक के लिए क्षमा करें, लेकिन फ़ाइल नाम के आगे वे आइकन क्या हैं? :) किसी प्रकार का स्रोत-नियंत्रण सही है?
एलेक्स

6
@Jitbit: VisualSVN
रोकें

जवाबों:


237

यदि आप return PartialView()अपने नियंत्रकों (इसके बजाय return View()) से हैं, तो _viewstart.cshtmlनिष्पादित नहीं किया जाएगा।


6
अहा, PartialViewResultकक्षा के बारे में नहीं जानता था । यही मुझे चाहिए था।
पोर्टमैन

6
एक अनुवर्ती के रूप में, मैंने पाया मैं की जरूरत है कि यह भी स्पष्ट रूप से करने के लिए कार्रवाई विधि की वापसी प्रकार सेट PartialViewResultसामान्य के बजाय ActionResult
पोर्टमैन

2
@Portman आप मुद्दों को देख रहे हैं जब एक्शन विधि का रिटर्न प्रकार नहीं है ActionResult? मुझे आश्चर्य है कि यह एक मुद्दा है क्योंकि एमवीसी रनटाइम को इस मामले में कोई अलग व्यवहार नहीं करना चाहिए (अर्थात जब तक एक्शन विधि द्वारा लौटाया गया प्रकार है ActionResultया इससे ली गई कोई भी क्लास बस काम करना चाहिए)।
marcind

अगर मैं वापसी प्रकार सेट करता हूं तो @marcind मुझे w3wp.exe पर एक स्टैक ओवरफ्लो मिलता है ActionResult। रिटर्न प्रकार है तो ठीक काम करता है PartialViewResult। सोचें कि मुझे कनेक्ट बग दर्ज करने की आवश्यकता है?
पोर्टमैन

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