2011-11-07 5 views
12

मेरी वेबसाइट पर, मैं एक वर्ग (एक अस्थायी साइडबार) मैं केवल उन (व्यवस्थापकों) की एक उप-सेट के लिए प्रदान की गई चाहते हैं कि की है। मैं आशा करती हूं कि मैं अगर अनुभाग या दिखाया जाना चाहिए नहीं है, लेकिन अगर खंड गाया नहीं है कि पृष्ठ पर त्रुटि का कारण बनता है निर्धारित करने के लिए मास्टर लेआउट में तर्क रख सकते हैं।मैं कैसे वैकल्पिक ASP.Net MVC 3 में एक वर्ग प्रस्तुत करना हो?

उदाहरण कोड - Layout.cshtml ...

... code ... 
@if(user.IsAdmin) { 
    @RenderSection("AdminSidebar", false) 
} 

उदाहरण कोड - MyPage.cshtml ...

@section AdminSidebar { 
    ... code ... 
} 

किसी को भी पता है कि यह कैसे डाल करने के लिए बिना काम करने के लिए प्राप्त करने के लिए सभी बच्चे पृष्ठों में तर्क?

एक नोट के रूप में, IsSectionDefined ("AdminSidebar") केवल लेआउट फ़ाइल में काम करता है। यह परीक्षण करने के लिए पृष्ठ में काम नहीं करता है कि क्या अनुभाग उपलब्ध है या नहीं।

उत्तर

16

मैं अगर इस ढांचे का दुरुपयोग नहीं कर रहा है पता नहीं है, लेकिन अगर आप वास्तव में उस रास्ते जाने के लिए इच्छुक हैं तो आप की कोशिश कर सकते हैं:

@{ 
    if(user.IsAdmin) { 
     @RenderSection("AdminSidebar", false) 
    } 
    else { 
     RenderSection("AdminSidebar", false).WriteTo(TextWriter.Null); 
    } 
} 
+1

चालाक। मुझें यह पसंद है। मेरी इच्छा है कि एमवीसी ढांचे ने केवल उन अनुभागों को अनदेखा किया जिन्हें त्रुटियों को फेंकने के बजाय परिभाषित नहीं किया गया था, लेकिन इससे मुझे इस अनुभाग को परिभाषित करने की अनुमति मिलती है। – Brian

+0

@Brian लेकिन जैसे itsmatt है, जो अधिक स्वच्छ है ने सुझाव दिया कि क्यों renderPartial का उपयोग नहीं? – gdoron

+0

क्योंकि तब मुझे प्रत्येक पृष्ठ के लिए आंशिक बनाना होगा जिसे मैं एक साइडबार भी जोड़ना चाहता हूं (यह पृष्ठ पर आधारित प्रासंगिक है)। – Brian

0

कुछ है कि उपयोगकर्ताओं को अनुमति स्तर के आधार पर सशर्त है के लिए एक अनुभाग का उपयोग करना मेरे लिए थोड़ा गंदा लगता है। मैं रेंडरपार्टियल (उपयोगकर्ता) का उपयोग करता हूं और तर्क को आंशिक में डालता हूं।

@if(user.IsAdmin) 
{ 
    @Html.Partial("SideBar") 
} 

बच्चे पृष्ठों के सभी के लिए अनिवार्य रूप से एक ही तरीके से वैकल्पिक अनुभाग से निपटने के लिए है से बचने के लिए:

@if(user.IsAdmin) { 
     ..code.. 
    } 
1

मेरी _Layout.cshtml फ़ाइल में मैं कुछ इस तरह से किया था। जब मैंने पहली बार वैकल्पिक अनुभाग की कोशिश की, तो मैंने पाया कि मैं अपने कार्यान्वयन में कम से कम बाल पृष्ठों में दोहरा रहा था।

जहां मैंने वैकल्पिक अनुभागों के लिए @RenderSection कॉल का उपयोग किया है, यह आमतौर पर पृष्ठ-विशिष्ट सामग्री प्रदान करने के लिए किया गया है।

+0

धन्यवाद, लेकिन दुर्भाग्य से प्रत्येक पृष्ठ विभिन्न तत्वों हो सकता है साइडबार में (यह मूल रूप से प्रासंगिक उपकरणों का एक सेट है) इसलिए यह काम नहीं करेगा। – Brian

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