2009-09-13 13 views
39

देखने से एक्सेस कंट्रोलर इंस्टेंस मैं दृश्य से नियंत्रक उदाहरण कैसे प्राप्त कर सकता हूं? जैसे मेरे पास HomeController है जो उसके Index व्यू देता है। उस दृश्य के अंदर मैं HomeController उदाहरण का उपयोग करना चाहता हूं जिसने दृश्य बनाया है। मैं उसको कैसे करू?एएसपी.नेट एमवीसी:

+0

इसका उत्तर कैसे "आपको नहीं माना जाता" (सी.एफ. https://stackoverflow.com/q/9562214/1739000) नहीं है? –

उत्तर

70

ViewContext.Controller, और आपको इसे कास्ट करने की आवश्यकता होगी।

<% var homeController = ViewContext.Controller as HomeController; %> 

इस पोस्ट Asp.Net MVC: How do I get virtual url for the current controller/view? में कुछ अतिरिक्त झुर्रियों से आच्छादित है।

EDIT: यह मार्क सेमैन की सिफारिश के लिए कुछ मांस जोड़ने के लिए है कि आप मानव रूप से जितना संभव हो उतना दृष्टिकोण से कार्यक्षमता रखते हैं। यदि आप प्रस्तुत पृष्ठ के मार्कअप को निर्धारित करने में सहायता के लिए नियंत्रक का उपयोग कर रहे हैं, तो आप इसके बजाय Html.RenderAction(actionName, controllerName) विधि का उपयोग करना चाह सकते हैं। यह कॉल कार्रवाई को आग लग जाएगी, हालांकि यह एक अलग अनुरोध था और मुख्य पृष्ठ के हिस्से के रूप में इसका विचार शामिल था।

यह दृष्टिकोण अलग-अलग चिंताओं को लागू करने में मदद करेगा क्योंकि प्रस्तुति नियमों के संबंध में सभी भारी उठाने के लिए रीडायरेक्ट की गई विधि विधि। इसे अपने मूल दृश्य में सही तरीके से काम करने के लिए आंशिक दृश्य वापस करने की आवश्यकता होगी।

+0

यही वह है जिसे मैं ढूंढ रहा था। धन्यवाद डेविड – Alex

+0

@ एलेक्स: –

+0

@ डेविड में मदद करने में खुशी: रेंडरएक्शन केवल फ्यूचर्स पैकेज में ही उपलब्ध है? – Alex

28

मेरी राय में, आपको एक ऐसे डिज़ाइन पर विचार करना चाहिए जहां दृश्य को नियंत्रक के बारे में जानने की आवश्यकता नहीं है। विचार यह है कि नियंत्रक अनुरोध से संबंधित है, मॉडल और हाथों को स्वीकार करता है जो मॉडल को दृश्य में बंद कर देता है। उस बिंदु पर, नियंत्रक का काम किया जाता है।

मुझे लगता है कि अगर डिज़ाइन नियंत्रक के बारे में कुछ भी जानने की आवश्यकता है तो यह एक डिज़ाइन दोष का संकेत है। क्या आप इस बारे में अधिक जानकारी दे सकते हैं कि आप इसे पूरा करने की कोशिश कर रहे हैं?

मुझे अक्सर लगता है कि अच्छी तरह से डिज़ाइन किए गए ढांचे (जैसे एमवीसी फ्रेमवर्क) से निपटने पर, अगर ऐसा लगता है कि ढांचा आपको लड़ रहा है, तो आप शायद गलत तरीके से कार्य के बारे में सोच रहे हैं। यह मेरे साथ बहुत कुछ हुआ है, और पीछे हट रहा है और खुद से पूछ रहा है कि मैं वास्तव में पूरा करने की कोशिश कर रहा हूं, अक्सर नई अंतर्दृष्टि की ओर जाता है।

+1

+1। यदि उपयोगिता वर्ग की आवश्यकता है, तो उन्हें आमतौर पर व्यूमोडेल में या पूरी तरह से अलग इकाई में जाना चाहिए, क्योंकि नियंत्रक जीवन चक्र "वापसी" के साथ समाप्त होना चाहिए। –

+0

मार्क: मैंने अपनी खुद की पोस्ट में थोड़ा सा तर्क दिया है। मेरे द्वारा +1 –

+0

+1 भी। मैंने इसके बारे में सोचा। मैं जो कर रहा हूं वह यह है कि मेरे पास ASP.NET MVC के लिए नियमित स्टार्टर प्रोजेक्ट से LogOnUserControl के समान आंशिक दृश्य है। यह उपयोगकर्ता नाम प्रदर्शित करता है (लेकिन पृष्ठ संदर्भ/आईपीआर प्रिंसिपल से नहीं आ रहा है - यह कस्टम है)। मेरे नियंत्रक के पास पहले से ही एक सेवा है जो उपयोगकर्ता नाम प्रदान करने में सक्षम है, और इसलिए मैं दृश्य में पुन: तत्काल होने के बजाय नियंत्रक से उदाहरण लेना चाहता हूं।मैं मॉडल का उपयोग नहीं कर रहा हूं क्योंकि मैं नियमित रिटर्न व्यू() का लाभ लेना चाहता हूं और मुद्दों में नहीं चलना चाहता हूं (याद रखें, यह साझा किया गया है, इसलिए मुझे वीएम बेस क्लास इत्यादि की आवश्यकता होगी – Alex

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