2013-03-29 4 views
5

क्या दृढ़ता से टाइप की गई नियंत्रक कार्रवाई बनाने का कोई तरीका है? उदाहरण के लिए:नियंत्रक विधियों के लिए कार्रवाई लिंक के लिए संकलन-समय की जांच

एक नियंत्रक में मैं का उपयोग करें:

aClientLink=Url.Action("MethodName", "ControllerName", new { Params... }); 

मैं उपयोग करना चाहते हैं:

aClientLink=Url.Action(Controller.MethodName,ControllerName); 

मैं पहिया फिर से बनाने के लिए नहीं करना चाहती। मुझे यकीन है कि किसी के पास कुछ चालाक समाधान है। यह मुझे नियंत्रक विधियों के लिए संकलन समय की जांच जोड़ने की अनुमति देगा।

+0

मुझे यह पसंद है --- और इसे आजमाएं। समाधान। परंतु! –

उत्तर

3

आप अपना खुद का HtmlHelper एक्सटेंशन विधियां बना सकते हैं जो अभिव्यक्तियों का उपयोग करते हैं (वैसे ही वे मॉडल के गुणों के संदर्भ में उपयोग किए जाते हैं)।

@* An expression used to indicate which property of the model should be 
examined. It may or may not actually be executed. *@ 
@Html.IdFor(o => o.FirstName) 

@* Don't actually evaluate the expression, just parse it for the method name *@ 
@Url.ActionFor(o => o.ControllerMethod()) 

आप जो इनपुट मानों के रूप में भाव ले सहायक तरीकों के उदाहरण के लिए MVC स्रोत पर देख सकते हैं, और आप कैसे एक अभिव्यक्ति से एक वस्तु संपत्ति के बारे में मेटाडाटा को पुनः प्राप्त करने के लिए मेरे answer here देख सकते हैं।

हालांकि ...

एक दृश्य में इस्तेमाल किया, मैं तर्क था कि इस तरह के दृष्टिकोण नियंत्रक को अभी तक बहुत कसकर आपके विचार बांध। मैं जादू तारों से नापसंद करता हूं लेकिन वे पूर्ण decoupling प्रदान करते हैं।

यह स्पष्ट नहीं है कि आप नियंत्रक के अंदर ऐसी विधियों का उपयोग करना चाहते हैं, इस मामले में चिंताओं को अलग करना समस्या से कम हो जाता है। आप अभी भी कुछ क्षमताओं को खो देंगे, जैसे कि एक्शन नाम को उपनाम करने की क्षमता।

+0

मैंने एक HTMLHelper विस्तारक को परिवर्तित करने का प्रयास किया लेकिन यह सभी क्लाइंट पक्ष है और नियंत्रकों के साथ मेरे स्थिर वर्गों में संदर्भ के रूप में काम नहीं करेगा जो मुझे नियंत्रक नाम/विधियों को परिभाषित करने की अनुमति देगा ... मैं बेवकूफ कॉन्स स्ट्रिंग का उपयोग करने जा रहा हूं मूल्य जब तक मैं इसे आंकड़ा नहीं कर सकता। अब और समय नहीं बचा है। –

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