2013-03-28 10 views
17

मेरे पास एक एएसपी.नेट एमवीसी 4 एप्लीकेशन है जिसमें मैं कई क्षेत्रों का निर्माण कर रहा हूं, क्या मैं प्रोग्रामेटिक रूप से मौजूद क्षेत्रों की संख्या और उनके नामों को ढूंढ सकता हूं।एएसपी.नेट एमवीसी 4 सभी क्षेत्रों की सूची

उत्तर

30

AreaRegistration.RegisterAllAreas();DataTokens["area"] के साथ प्रत्येक क्षेत्र मार्ग पंजीकृत करता है जहां मान क्षेत्र का नाम है।

तो तुम आप देख रहे हैं AreaRegistration के लिए खुद को आप प्रतिबिंब का उपयोग जो आपके assambly में AreaRegistration से निकला प्रकार प्राप्त करने के लिए कर सकते हैं RouteTable

var areaNames = RouteTable.Routes.OfType<Route>() 
    .Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area")) 
    .Select(r => r.DataTokens["area"]).ToArray(); 

से पंजीकृत क्षेत्र के नाम मिल सकता है।

+0

त्वरित उत्तर के लिए धन्यवाद – dev

0

AreaRegistration.RegisterAllAreas() वेब एप्लिकेशन के पूर्व-प्रारंभिकरण का उपयोग नहीं किया जा सकता है। हालांकि, अगर आप RegisterAllAreas() पर कॉल किए बिना क्षेत्र प्राप्त करना चाहते हैं, उदा। एक स्वचालित परीक्षण में, उसके बाद निम्न कोड से सहायता मिलेगी:

 var areaNames = new List<string>(); 
    foreach (var type in typeof(MvcApplication).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(AreaRegistration)))) { 
     var areaRegistration = Activator.CreateInstance(type) as AreaRegistration; 
     areaNames.Add(areaRegistration.AreaName); 
    } 

ध्यान दें कि MvcApplication वर्ग HttpApplication से ली गई है। आप किसी भी वर्ग के नाम का उपयोग तब तक कर सकते हैं जब तक वह वर्ग असेंबली पंजीकरण के समान असेंबली में हो, यानी AreaRegistration से प्राप्त कक्षाएं। यदि आपने अपने आवेदन को एक से अधिक असेंबली में क्षेत्रों के साथ विभाजित कर दिया है, तो आपको तदनुसार इस कोड को अनुकूलित करना होगा ताकि वह उन सभी असेंबली को खोज सके।

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