2009-03-31 14 views
103

मुझे ईमेल भेजने के लिए नियंत्रक पर कार्रवाई में एक लिंक बनाने में सक्षम होना चाहिए। ऐसा करने का सबसे अच्छा अभ्यास क्या है? यदि मेरे मार्ग बदलते हैं तो मैं इसे स्वयं बनाना नहीं चाहता हूं।नियंत्रक में एक यूआरएल बनाना .NET MVC

क्या मुझे प्रत्येक ईमेल के लिए एक दृश्य होना चाहिए और इसे प्रस्तुत करना और भेजना चाहिए? यह करने का एक अच्छा तरीका हो सकता है।

उत्तर

196

तुम सिर्फ एक विशेष प्रकार की गतिविधि के लिए पथ प्राप्त करना चाहते हैं, UrlHelper का उपयोग करें:

UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext); 
string url = u.Action("About", "Home", null); 

आप हाइपरलिंक बनाने के लिए चाहते हैं:

string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null); 

Intellisense आप प्रत्येक के अर्थ दे देंगे पैरामीटर के। टिप्पणियाँ से


अद्यतन:

string url = this.Url.Action("About", "Home", null); 
+17

फॉलोअप: पिछले पैरामीटर (RouteValueDictionary) यहां से पीछे नहीं के लिए एक उदाहरण है: नई System.Web.Routing.RouteValueDictionary (नए {आईडी = 1}) –

+13

आप एक का निर्माण करने की जरूरत नहीं है नया UrlHelper; नियंत्रक पर एक। यूआरएल संपत्ति है जो आपको सही RequestContext के साथ एक प्रदान करेगी। –

+0

"रूट" कहां से आता है? अगर मुझे मार्ग का नाम हार्डकोड करना है, तो मैं मिलान करने की कोशिश कर रहा हूं, क्यों न केवल यूआरएल को हार्डकोड करें? – xr280xr

10

मैं एक ही मुद्दा था, और ऐसा लगता है Gidon का जवाब एक छोटे दोष है: यह एक सापेक्ष URL, उत्पन्न करता है जो नहीं कर सकते हैं नियंत्रक पहले से ही एक UrlHelper है मेल द्वारा भेजा जाना चाहिए।

मेरे समाधान इस तरह दिखता है:

string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString }); 

इस तरह, एक पूर्ण URL उत्पन्न होता है, और यह काम करता है, भले ही आवेदन गहरी होस्टिंग सर्वर पर कई स्तरों है और इसमें 80 के अलावा किसी अन्य बंदरगाह का उपयोग करता है।

संपादित करें: मुझे this भी उपयोगी मिला।

19

आप पूर्ण यूआरएल (उदाहरण के लिए ईमेल द्वारा भेजने के लिए) की जरूरत है निम्नलिखित में निर्मित विधियों में से एक का उपयोग करें:

इस के साथ

आप निर्माण डे यूआरएल के लिए उपयोग करने के लिए डी मार्ग को ठीक:

Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) 

यहाँ यूआरएल मार्ग इंजन के बाद बनाया गया है डे सही एक निर्धारित:

Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) 

दोनों तरीकों में, पिछले 2 मापदंडों प्रोटोकॉल और हॉस्टनाम निर्दिष्ट करता है।

सम्मान।

+6

'Url.Action (क्रिया, नियंत्रक, मार्गवर्ग, प्रोटोकॉल) का उपयोग करके FYI भी पूर्ण यूआरएल उत्पन्न करता है, इसलिए यदि आपको आवश्यकता नहीं है तो आपको होस्टनाम निर्दिष्ट करने की आवश्यकता नहीं है। –

3

एक कार्रवाई करने के लिए एक पूर्ण URL बनाने के लिए एक और तरीका है:

var relativeUrl = Url.Action("MyAction"); //..or one of the other .Action() overloads 
var currentUrl = Request.Url; 

var absoluteUrl = new System.Uri(currentUrl, relativeUrl); 
0

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन सिर्फ मामले में आप ASP.NET कोर में एक ही बात करने के लिए कोशिश कर रहे हैं, यहाँ है कैसे आप एक कार्रवाई के अंदर UrlHelper बना सकते हैं:

var urlHelper = new UrlHelper(this.ControllerContext); 

या, आप Controller.Url संपत्ति यदि आप Controller से विरासत इस्तेमाल कर सकते हैं।

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