2012-04-13 7 views
9

के लिए एक्सटेंशन लिखते समय UrlHelper को कैसे कॉल करें मेरे पास ASP.NET MVC3 प्रोजेक्ट है और मैं कुछ एक्सटेंशन विधियां लिख रहा हूं जो HTML लौटाते हैं लेकिन मुझे उन्हें प्रस्तुत करने के लिए UrlHelper की आवश्यकता है। ऐसा करने के लिए मैं UrlHelper को विस्तारित कर रहा हूं लेकिन मुझे अर्थशास्त्र पसंद नहीं है क्योंकि UrlHelper को HTML के साथ URL और HtmlHelper के साथ काम करना चाहिए। मैं UrlHelper के बजाय इस विधियों के साथ HtmlHelper का विस्तार करना चाहता हूं।HtmlHelper

मेरी समस्या यह है कि अब मैं एचटीएमएलहेल्पर की विस्तार विधि से UrlHelper तक कैसे पहुंचा सकता हूं, क्या यह भी संभव है? या मुझे UrlHelper एक्सटेंशन के साथ रहना होगा।

मुझे पता है कि मैं एक तर्क के रूप में यूआरएल सहायक भेज सकता हूं लेकिन मुझे यह समाधान बहुत पसंद नहीं है।

कोड के बाद

विस्तार विधि का नमूना मैं बात कर रहा हूँ है:

public static HtmlString AnchorLink(this UrlHelper url, string text, string action, string anchor) { 
    return new HtmlString(string.Format("<a href=\"{0}#{2}\">{1}</a>", url.Action(action), text, anchor)); 
} 

धन्यवाद

+0

के संभावित डुप्लिकेट [में URL जेनरेट करें एचटीएमएल सहायक] (http://stackoverflow.com/questions/1443647/generate-url-in-html-helper) – Marijn

उत्तर

20

आप एक UrlHelper का दृष्टांत सकता है अपने आप को ...

public static HtmlString AnchorLink(this HtmlHelper html, string text, string action, string anchor) { 
    var urlHelper = new UrlHelper(html.ViewContext.RequestContext); 
} 
+1

दिलचस्प विचार, नए सहायक _fast_ ऑपरेशन की तत्कालता है (उदाहरण के लिए 'नई सूची () ')? क्या आप इसे मेरी समस्या के समाधान के रूप में अनुशंसा करेंगे? या UrlHelper को तर्क के रूप में आपूर्ति करना _better_ होगा? – NightElfik

+3

प्रदर्शन-वार यह व्यावहारिक रूप से ध्यान देने योग्य होगा। कन्स्ट्रक्टर कुछ खास वैरिएबल नहीं करता है, फिर कुछ निजी चर सेट करता है। आपके विचार के लिए 'InitHelpers' बिल्कुल वही है, अर्थात् कन्स्ट्रक्टर को कॉल करना। यदि आप इस तथ्य को अनदेखा करना चाहते हैं कि UrlHelper के लिए एक अतिरिक्त पैरामीटर आपके दृश्य को 'अव्यवस्थित' करेगा, तो आप इसे पैरामीटर के रूप में जोड़ सकते हैं। हालांकि मैं प्रदर्शन तथ्य को अनदेखा करूँगा और पठनीयता के लिए जाऊंगा। – Ropstah

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