2008-12-09 10 views
50

Próbuję napisać rozszerzenie helper HTML, które wyprowadza tag obrazu. Potrzebuję uzyskać dostęp (w ramach kodu C#) coś podobnego pomocnika Razor @ @ Url.Content(), aby uzyskać poprawny adres URL dla bieżącego kontekstu. Jak to zrobić?W ASP.NET MVC, w jaki sposób mogę użyć pomocnika Razor @ Url.Content() z kodu C#?

+1

Musisz być bardziej szczegółowe niż „z kodu”. To wszystko kod. Masz na myśli działanie kontrolera? – liammclennan

+0

Tak, jest swobodnie dostępny dla kodu kontrolera - zobacz moją odpowiedź poniżej http://stackoverflow.com/questions/351937/in-asp-net-mvc-how-can-use-i-url-content-from-code/7396627 # 7396627 –

+0

Dlaczego nie piszesz [metoda rozszerzenia] (http://msdn.microsoft.com/en-us/library/bb383977.aspx)? – JSC

Odpowiedz

-1

Można dostać się do obiektu Request a tym samym adresem URL tak:

string fullUrl = HttpContext.Current.Request.Url.AbsoluteUri; 
+0

Dlaczego odpowiedź Tima Scotta została wzięta w górę? –

2

coś takiego może być?

public static string MyHelper(this HtmlHelper h) 
{ 
     string url = h.ViewContext.HttpContext.Request.Url.AbsoluteUri; 
} 
38

Można utworzyć własną instancję UrlHelper przekazując w odpowiednim ViewContext. Na przykład, aby zrobić to od pomocnika obrazu:

public static string CustomImage(this HtmlHelper html) 
{ 
    var Url = new UrlHelper(html.ViewContext.RequestContext); 
} 

W tym momencie można nazwać Url.Content() lub jakąkolwiek inną metodę UrlHelper.

+6

W RC1 powinno być "var url = new UrlHelper (html.ViewContext.RequestContext);" – Wilka

+0

Rzeczywiście Wilka, +1 – Ropstah

+0

To jest dobra odpowiedź, pomógł mi. – zidane

84

Użyj następujących poleceń, aby naśladować Url.Content w kodzie.

VirtualPathUtility.ToAbsolute("~/url/"); 
+0

To działało dla mnie na stronie internetowej WebMatrix. Dzięki. – Amir

+1

To jest fajne, czy istnieje jakiś scenariusz/edgecase, gdzie Url.Content() zapewnia inny wynik niż ten? – Zasz

+3

Jeśli adres URL zawiera parametry ciągu zapytania, funkcja VirtualPathUtility.ToAbsolute() spowoduje zgłoszenie błędu, Url.Content nie. –

0

tak, użyj tego kodu, aby dodać url.content w kodzie to praca, bro i sist

[Próbka] var img_btn_edit = VirtualPathUtility.ToAbsolute ("~/Content/images/ołówek .png ");

2

Tak, można.

od kontrolera można nazwać:

this.Url.Content("~/Somerelativepath?somethingelse=true");

Powiązane problemy