2013-06-09 16 views
7

मैं एक परियोजना के लिए एक गतिशील भूमिका आधारित नेविगेशन समाधान बनाने के लिए एक तरीके से आने का प्रयास कर रहा हूं जिस पर मैं काम कर रहा हूं। , एक व्यवस्थापक लिंक आवेदन आँकड़े देखने के लिए होगा ग्राहकों के खातों, ect का प्रबंधन ... एक मानक उपयोगकर्ता लिंक का प्रबंधन करने के लिए होता है, जबकि:भूमिका आधारित नेविगेशन

नेविगेशन केवल लिंक है कि उपयोगकर्ताओं को भूमिका के सापेक्ष हैं, उदाहरण के लिए प्रदर्शित करना चाहिए अपने अकाउंट, .. दोस्तों, ect के साथ संवाद

मैं वर्तमान में नेविगेशन भूमिका की जाँच के लिए कुछ बुनियादी सशर्त बयान और उचित लिंक प्रदर्शित करने के लिए मार्कअप के मिश्रण के साथ नामक केवल एक आंशिक दृश्य है। यह काम करता है, लेकिन, मुझे पता है कि यह जल्दी से अप्रबंधनीय हो सकता है।

नेविगेशन आंशिक दृश्य:

@if(User.IsInRole("Admin")) { 
    <li><a href="#">Statistics</a></li> 
    <li><a href="#">Accounts</a></li> 
    <li><a href="#">Dashboard</a></li> 
} 
@if(User.IsInRole("User")) { 
    <li><a href="#">Account</a></li> 
    <li><a href="#">Friends</a></li> 
} 
// code omitted 

वहाँ एक रास्ता दृश्य से बाहर इस तर्क हो और नियंत्रक इस संभाल जाने के लिए है?

+1

क्या आपका आंशिक उपयोग बाल क्रिया विधि का उपयोग करता है? –

+0

धन्यवाद डेव। नहीं, यह नहीं है। वास्तव में पहले बाल क्रियाओं का उपयोग नहीं किया है। क्या आप अपने प्रश्न पर विस्तार करना चाहते हैं? मुझे यकीन नहीं है कि इस परिदृश्य में बाल कार्रवाई किस भूमिका निभाएगी। – mezmi

+4

बाल क्रियाएं बहुत अच्छी हैं। वे वे क्रियाएं हैं जो आपके लिए आंशिक रूप से मॉडल को पास करती हैं। आप उन्हें 'एक्शन ("/ कंट्रोलर/एक्शन/आईडी") कहते हैं। आईडी भाग आपका हैंडल हो सकता है जिस पर आप बनाना चाहते हैं और मॉडल नेविगेशन आइटमों की सूची हो सकती है। इससे भी बेहतर, आपके बच्चे की कार्रवाई तर्क के बिना आपके उपयोगकर्ताओं की भूमिका को देख सकती है और उचित नौसेना बार वापस कर सकती है। मैंने इसे पहले भूमिका आधारित नेविगेशन के लिए उपयोग किया है। –

उत्तर

14

समाधान

के रूप में सुझाव दिया है, मैं एक ChildAction बुलाया मेनू और हर पात्र के लिए आंशिक दृश्य बनाया। कार्रवाई के अंदर मैं कुछ सशर्त बयान का उपयोग करके कुछ उचित भूमिका निभाता हूं और उचित दृश्य प्रस्तुत करता हूं।

यह सशर्त बयान उन विचारों से बाहर रखता है जो इसे बहुत साफ समाधान बनाता है।

मुझे यकीन है कि कुछ चीजें हैं जो इसे साफ करने के लिए की जा सकती हैं और मैं इसे सुधारने की कोशिश जारी रखूंगा।

यहां उपयोग किया गया समाधान है।

लेआउट व्यू में जहां मैं मेनू दिखाना चाहता था, मैंने इसका इस्तेमाल किया।

@Html.Action("Menu", "Navigation") 

फिर मैंने नेविगेशन नामक नियंत्रक बनाया और मेनू नामक एक एकल क्रिया को जोड़ा।

public class NavigationController : Controller 
{ 

    [ChildActionOnly] 
    public ActionResult Menu() 
    { 
     if (Roles.IsUserInRole("Administrator")) 
     { 
      return PartialView("_NavigationAdmin"); 

     } 

     return PartialView("_NavigationPublic"); 
    } 

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