2009-04-26 9 views
9

हम जानते हैं कि दृश्यों के पीछे, एएसपी.नेट एमवीसी फ्रेमवर्क यह निर्धारित करने के लिए प्रतिबिंब का उपयोग करेगा कि कौन से नियंत्रक/क्रियाएं निष्पादित करने के लिए उपलब्ध हैं, किस वर्ग के आधार पर System.Web.Mvc.Controller और उन वर्गों में से, कौन सी विधियां ActionResult ऑब्जेक्ट लौटाती हैं।एएसपी.नेट एमवीसी अनुप्रयोग में नियंत्रकों/कार्रवाइयों की सूची तक पहुंच

मेरे प्रश्न के लिए - क्या मेरे एमवीसी अनुप्रयोग के भीतर से नियंत्रकों/कार्यों की इस सूची तक पहुंच बनाना संभव है?

(वर्तमान में असेंबली पर प्रतिबिंब का उपयोग करके मैं इसे स्वयं कर सकता हूं, लेकिन यदि सूची पहले ही एएसपी.नेट एमवीसी द्वारा बनाई गई है, तो मैं पहिया को फिर से आविष्कार करने के बजाय उस प्रयास का फिर से उपयोग करना चाहूंगा।)

उत्तर

15

new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions() नियंत्रक पर सभी कार्यों को दिखाते हुए ActionDescriptor ऑब्जेक्ट्स का संग्रह वापस कर देगा। यह चयन गुणों या नामकरण विशेषताओं जैसी चीजों को समझने के लिए पर्याप्त स्मार्ट नहीं है, इसलिए वेब-कॉल करने योग्य होने की हर कार्रवाई को गारंटी नहीं दी जाती है। लेकिन अगर आपको सीधे कार्रवाई को निष्पादित करने की आवश्यकता है, तो आप रुचि के किसी भी कार्यवाही पर ActionDescriptor.Execute() को कॉल कर सकते हैं।

6

यह कक्षा में System.Web.Mvc असेंबली में System.Web.Mvc.ControllerTypeCache नामक विधानसभा में किया जाता है।

वैसे, ActionResult वापस करने के लिए कार्रवाई विधियों की आवश्यकता नहीं है। उदाहरण के लिए, वे void खुशी से वापस कर सकते हैं।

+0

स्पष्टीकरण के लायक हो सकता है तो नियंत्रक पर कोई कार्रवाई क्या करती है। नियंत्रक पर किसी भी सार्वजनिक विधि को एक क्रिया के रूप में देखा जा सकता है जिसे मैं मानता हूं। – AnthonyWJones

+0

हाँ। निश्चित रूप से स्पष्ट रूप से '[NonAction]' के रूप में घोषित नहीं किया गया है। –