2013-05-17 6 views
12

अगर मैं के साथ एक पृष्ठ है:क्या रेजर अनुभाग वैकल्पिक बनाना संभव है?

<body> 
    @section SomeStuff { 
     <span>This is a section I just addered</span> 
    } 

</body> 

यह संभव नहीं के लेआउट इस खंड प्रस्तुत करना के लिए है, या यह कैसे धारणात्मक काम करना चाहिए करने के लिए है कि इसके विपरीत। ऐसा लगता है कि यह पृष्ठ पर कुछ अनुभागों को प्रस्तुत करने में सक्षम होने के लिए उपयोगी होगा (जब तक कि मैं इस बारे में गलत तरीके से सोच रहा हूं)।

संपादित करें: के रूप में अगर यह हर खंड रेंडर करने के लिए मुझे मजबूर कर रहा है The following sections have been defined but have not been rendered for the layout page "/Views/Layouts/_Layout1.cshtml": "SomeStuff".:

, त्रुटि संदेश सहित सहायक हो सकता है जब मैं मुख्य पेज में एक वर्ग में कहें, लेआउट पेज के साथ विफल पेज या कुछ पर।

अन्य शब्दों में, लेआउट.cshtml में, कॉल @ रेंडरसेक्शन नहीं है, लेकिन index.html में मेरे पास SomeStuff परिभाषित एक अनुभाग है। क्या वह कानूनी है? ऐसा लगता है कि यह मुझे पृष्ठ के सभी वर्गों को प्रस्तुत करने के लिए मजबूर कर रहा है, लेकिन ऐसा लगता है कि अनुभाग वैकल्पिक होना चाहिए, नहीं?

+1

आपका मतलब 'if' कथन की तरह है? – musefan

+1

मुझे भी जोड़ों की चीजें पसंद हैं –

+0

@ डेवएल - महान दिमाग एक जैसे सोचते हैं। – sircodesalot

उत्तर

22

यदि एक वर्ग के लिए आवश्यक है कि आप निर्दिष्ट कर सकते हैं।

@RenderSection("SomeStuff", required: false) 

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

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+0

यह स्वीकार्य उत्तर कैसे हो सकता है? यह एक और सवाल से संबंधित है!यह दूसरी तरफ है: मैं दृश्य में एक सेक्शन को परिभाषित करता हूं, फिर मैं इसे लेआउट में उपयोग नहीं करता - क्या मैं यह कर सकता हूं? – Simone

+0

@ सिमोन: http://stackoverflow.com/a/8041081/70345 –

0

आप कर सकता है:

@if (condition) { 
    @RenderSection("SomeStuff") 
    } 

या बस @RenderSection से सीधे बल्कि एक conditional statement का उपयोग करें:

@if (yourCondition) { 
    <span>This is a section I just addered</span> 
} 
+0

शायद मैं कुछ गलत कर रहा हूं, लेकिन जब मैं अनुभाग को * मुख्य * पृष्ठ में डालता हूं, तो * लेआउट * पृष्ठ विफल रहता है क्योंकि यह '@RenderSection (" SomeStuff ") को कॉल नहीं करता है। ऐसा लगता है कि प्रतिपादन अनुभाग वैकल्पिक होना चाहिए, लेकिन यह ऐसा व्यवहार नहीं कर रहा है। – sircodesalot

+0

मुझे निम्न अनुभागों को परिभाषित किया गया है लेकिन लेआउट पेज के लिए प्रस्तुत नहीं किया गया है "/Views/Layouts/_Layout1.cshtml": "SomeStuff"। 'लगता है जैसे यह मुझे अनुभाग प्रस्तुत करने के लिए मजबूर कर रहा है। – sircodesalot

+0

@ सिर्कोड्सलॉट - मुझे विश्वास है कि लेआउट चाहता है कि आप @ रेंडरसेक्शन ("कुछ स्टफ") शामिल करें ... आप अपनी हालत लेआउट में डाल सकते हैं और इसे वहां कॉल कर सकते हैं (जैसे मैंने आपको दिखाया है) .... या बस '@ यदि पृष्ठ में (आपका कंडीशन) {} 'सीधे (कोई अनुभाग आवश्यक नहीं है) जिसमें 'लेआउट' पृष्ठ शामिल नहीं है। –

6

एक निश्चित लेआउट के लिए विख्यात ऐसा कुछ है आपका लेआउट.cshtml

@RenderSection("Somestuff", required:false) 
5

आप आवश्यक पैरामीटर को गलत पर सेट करके वैकल्पिक होने के लिए एक सेक्शन सेट कर सकते हैं। यदि आप अपने सेक्शन के आस-पास कुछ वैकल्पिक रैपर HTML शामिल करना चाहते हैं तो आप IsSectionDefined विधि का भी उपयोग कर सकते हैं।

@if(IsSectionDefined("SideBar")) 
{ 
    <div class="sidebar"> 
     @RenderSection("SideBar", required: false) 
    </div> 
} 
संबंधित मुद्दे