2011-11-18 10 views
11

मान लें कि मेरे पास मेरे एएसपी.नेट एमवीसी 3 एप्लिकेशन में निम्न संरचना है।मेरा .cshtml पृष्ठ को सामग्री को परिभाषित करने की आवश्यकता क्यों है?

  • आइटम
    • Index.cshtml
  • श्रेणियाँ
  • साझा
    • _Index.cshtml
    • _Site.cshtml
    • Index.cshtml

दोनों Index.cshtml फ़ाइलें लेआउट पेज के रूप में इस्तेमाल करते हैं और _Index.cshtml_Index_Site लेआउट के अंदर नीडिंत है।

Items/Index_Index में परिभाषित वैकल्पिक अनुभाग लागू करता है। Shared/Index खाली है।

Items/Index देखें ठीक काम करता है। चूंकि श्रेणियों में कोई अनुक्रमणिका नहीं है, इसलिए यह साझा फ़ोल्डर में से एक का उपयोग करता है। यह काम नहीं करता।

यह

"RenderBody" विधि लेआउट पेज के लिए बुलाया नहीं किया गया है "~/दृश्य/साझा/_Index.cshtml" त्रुटि फेंकता है।

_Site तो कॉल RenderBody, और _Site से _Index इनहेरिट करती है, _Index में सामग्री की आवश्यकता RenderBody कॉल को पूरा नहीं करता है और Shared/Index.cshtml खाली हो सकता है?

कारण मैं पूछता हूं क्योंकि मेरे पास एक एएसपी.नेट एमवीसी 1 एप्लिकेशन है जो मास्टर पेजों का उपयोग करके इस संरचना को कार्यान्वित करता है और यह ठीक काम करता है, लेकिन इसे रेज़र के साथ एमवीसी 3 में परिवर्तित करने से यह समस्या हो रही है।

_Site.cshtml

<!DOCTYPE html> 
// head 
<body> 
    @RenderBody() 
</body> 

_Index.cshtml

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

<div id="sub-menu"> 
    // Markup 
</div> 

// More markup 

@RenderSection("SectionOne", required: false) 

@RenderSection("SectionTwo", required: false) 

आइटम/Index.cshtml (कार्य)

:

यहाँ मैं क्या वर्णन कर रहा हूँ की बुनियादी रूपरेखा है

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

@section SectionOne { 
    // Markup 
} 

साझा किया गया /Index.cshtml (RenderBody त्रुटि)

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

// Rest of this file is empty 

उत्तर

11

मुझे यकीन है कि मैं आप पूरी तरह से पालन नहीं कर रहा हूँ, लेकिन सभी लेआउट पृष्ठों भले ही वे नेस्ट रहे RenderBody() के लिए, है। RenderBody() "बच्चे" के लिए सामग्री प्रस्तुत करता है। जब आपके पास नेस्टेड लेआउट पेज होते हैं तो नेस्टेड लेआउट माता-पिता का बच्चा होता है, और इसका आउटपुट रेंडरबॉडी में प्रस्तुत किया जाना चाहिए।इसी तरह, बच्चे के बच्चे को अपने शरीर को मध्य पृष्ठ में प्रस्तुत करना होता है।

इसे एक और तरीका रखने के लिए, @section में जो कुछ भी नहीं है उसे "बॉडी" माना जाता है। इसलिए, _Index.cshtml को इसके शरीर को प्रस्तुत करने की आवश्यकता है (index.cshtml) और _Site.html को इसके शरीर (_Index.cshtml) को प्रस्तुत करना होगा। यह श्रृंखला ऊपर जाता है।

संपादित करें:

ऐसा प्रतीत होता है एक लेआउट, कम से कम एक खंड रेंडर करने के लिए यह एक RenderBody() या एक RenderSection() साथ होना है। हालांकि यह सच हो सकता है कि अनुभाग वैकल्पिक हैं, कम से कम एक सेक्शन प्रस्तुत करना नहीं है। या तो अपने index.cshtml में एक खाली अनुभाग जोड़ें या अपने _Index.cshtml पर एक रेंडरबॉडी() जोड़ें।

+0

मेरा _Index.cshtml हालांकि @RenderBody को कॉल नहीं करता है। _Index बस _Site से अनुभाग लागू करता है, और कुछ नए परिभाषित करता है। फिर आइटम/इंडेक्स _Index अनुभागों में से कुछ लागू करता है। बस। – Brandon

+0

@ ब्रैंडन - शायद यह मदद करेगा यदि आपने कुछ बुनियादी सीएसटीएमएल कोड दिखाया है, क्योंकि मैं समझ नहीं पा रहा हूं कि आप क्या वर्णन कर रहे हैं। –

+0

अद्यतन प्रश्न। हो सकता है कि मैं नेस्टेड पृष्ठों को सही ढंग से कार्यान्वित नहीं कर रहा हूं, लेकिन मूल रूप से इसकी संरचना है। – Brandon

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