2012-02-16 11 views
6

मेरे पास _ViewStart है जो मेरे प्रोजेक्ट (हेडर, फ़ूटर) के लिए मास्टर लेआउट को परिभाषित करता है।नेस्टेड सामग्री के लिए क्षेत्रों पर _ViewStart का उपयोग

इस परियोजना में, मेरे पास कई क्षेत्र हैं। प्रत्येक क्षेत्र में एक ही हेडर और पाद लेख होता है, साथ ही इसका अपना साइड मेनू होता है। इसके लिए, मैंने उस क्षेत्र के रूट डीआईआर पर एक _ViewStart बनाया है। यहाँ (सरलीकृत) कोड है:

/Views/_ViewStart.cshtml

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

/Views/Shared/_Layout.cshtml

<html> 
     <div> 
      //header 
     </div> 
     <div> 
      @RenderBody 
     </div> 
    </html> 

क्षेत्र फू ->/क्षेत्रों/फू/दृश्य /_ViewStart.cshtml

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<div class="row"> 
<div class="sidemenu"> 
    //default sidemenu for this area 
</div> 
<div> 
     @RenderBody() 
</div> 
</div> 

पेज /Areas/Foo/Views/Bar/Index.cshtml से नहीं चल पाएगी और मैं इस त्रुटि मिलती है:

CS0103: नाम 'RenderBody' वर्तमान संदर्भ

कैसे मास्टर पृष्ठ घोंसले के इस प्रकार प्राप्त करने के लिए मौजूद नहीं है?

उत्तर

9

मैं अपने ही सवाल का जवाब देने से नफरत है, लेकिन यहाँ यह जाता है:

आप सीधे साइट के रूट _ViewStart संदर्भ नहीं दे सकता अपने क्षेत्र की _ViewStart पर अगर आप एक RenderBody वहाँ चाहते हैं।

तो समाधान है:

/Views/_ViewStart.cshtml संदर्भ /Views/Shared/_MainLayout.cshtml

/Areas/Foo/Views/_ViewStart.cshtml संदर्भ /Areas/Foo/Views/Shared/_AreaLayout.cshtml

/Areas/Foo/Views/Shared/_AreaLayout.cshtml संदर्भ /Views/Shared/_MainLayout.cshtml

और यही वह है। विधि "रेंडरबॉडी()" उपलब्ध कराने के लिए आपको "साझा" फ़ोल्डर का उपयोग करना होगा।

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