2008-12-09 17 views
50

Estoy tratando de escribir una extensión html helper que genera una etiqueta de imagen. Necesito acceder (dentro del código C#) algo como el ayudante de Razor @ Url.Content() para obtener la URL adecuada para el contexto actual. ¿Cómo se hace esto?En ASP.NET MVC, ¿cómo puedo usar el ayudante Razor @ Url.Content() del código C#?

+1

Necesita ser más específico que 'de código'. Es todo código. ¿Quiere decir de una acción de controlador? – liammclennan

+0

Sí, está disponible libremente para el código del controlador; consulte mi respuesta a continuación http://stackoverflow.com/questions/351937/in-asp-net-mvc-how-can-use-i-url-content-from-code/7396627 # 7396627 –

+0

¿Por qué no escribe un [método de extensión] (http://msdn.microsoft.com/en-us/library/bb383977.aspx)? – JSC

Respuesta

-1

Se puede llegar a la solicitud objeto y por lo tanto la URL como esto:

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

¿Por qué recibió la respuesta de Tim Scott votaciones ascendentes y este downvotes? –

2

Algo como esto tal vez?

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

Usted puede crear su propia instancia de UrlHelper pasando en el ViewContext apropiada. Por ejemplo, para hacer esto de un ayudante de la imagen:

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

En este punto se puede llamar Url.Content() o cualquier otro método UrlHelper.

+6

En RC1 que debería ser "var url = new UrlHelper (html.ViewContext.RequestContext);" – Wilka

+0

Indeed Wilka, +1 – Ropstah

+0

Esta es una buena respuesta que me ayudó. – zidane

84

Utilice lo siguiente para imitar Url.Content en el código.

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

Esto funcionó para mí en un sitio web de WebMatrix. Gracias. – Amir

+1

Esto es genial, ¿Hay algún escenario/edgecase donde Url.Content() proporciona resultados diferentes a este? – Zasz

+3

Si su url tiene parámetros de cadena de consulta, VirtualPathUtility.ToAbsolute() arrojará un error, Url.Content no. –

0

sí, utilizar este código para agregar url.content en su código Es un trabajo, hermano y sist

[muestra] var = img_btn_edit VirtualPathUtility.ToAbsolute ("~/contenido/imágenes/lápiz .png ");

2

Sí, puedes.

desde un controlador puede llamar:

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

Cuestiones relacionadas