2011-02-05 19 views
23

¿Cómo puedo generar una URL que apunte a una acción de controlador desde un método auxiliar fuera del controlador?¿Cómo puedo generar una URL fuera de un controlador en ASP.NET MVC?

+0

posible duplicado de [ASP.NET MVC - Acceso de Url.GenerateUrl Fuera del controlador] (http://stackoverflow.com/questions/3722352/asp-net-mvc-accessing-url-generateurl-from-outside-the-controller) –

+0

Supongo ¿no estás hablando del UrlHelper de View tampoco? – dotjoe

+4

Ninguna de las respuestas es verdaderamente * una respuesta * en absoluto. –

Respuesta

1

Pass UrlHelper a su función de ayuda y entonces se podría hacer lo siguiente:

public SomeReturnType MyHelper(UrlHelper url, // your other parameters) 
{ 
    // Your other code 

    var myUrl = url.Action("action", "controller"); 

    // code that consumes your url 
} 
+18

umm, si ya tiene el UrlHelper, ¿por qué llamar a este método? – hunter

+0

@hunter: OP tiene un helper, necesita la url en ese helper, sugiero que se pase UrlHelper a su ayudante para generar la url que quiere. Edité mi respuesta para dejar más claro lo que intento sugerir. –

+1

¿No puedo acceder a UrlHelper desde una clase estática o algo construido en asp.net mvc? Sin pasar el UrlHelper. –

1

Dado que es probable que desee utilizar el método en una vista, se debe utilizar la propiedad Url de la vista. Es de tipo UrlHelper, lo que le permite hacer

<%: Url.Action("TheAction", "TheController") %> 

Si se quiere evitar ese tipo de referencias de cadenas en sus puntos de vista, se podría escribir métodos de extensión en UrlHelper que lo crea para usted:

public static class UrlHelperExtensions 
{ 
    public static string UrlToTheControllerAction(this UrlHelper helper) 
    { 
     return helper.Action("TheAction", "TheController"); 
    } 
} 

que se utilizaría este modo:

<%: Url.UrlToTheControllerTheAction() %> 
58

podría utilizar el siguiente si usted tiene acceso a la HttpContext:

var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); 
+0

gracias ... tanto;) – Pawan

+2

Esta debería ser la respuesta correcta. Simplemente pase el objeto al método (la respuesta correcta actual) es un poco obvio y no es específico de UrlHelper. – nashwan

+0

Se pudo proporcionar mediante inyección (Autofac) con la siguiente línea; 'builder.Register (context => new UrlHelper (context.Resolve ())). InstancePerRequest();' –

2

Usando la respuesta de L01NL, podría ser importante tener en cuenta que el método de Acción también obtendrá el parámetro actual si se proporciona uno. Por ejemplo: proyecto

edición con id = 100 Url es http://hostname/Project/Edit/100

urlHelper.Action("Edit", "Project") vuelve http://hostname/Project/Edit/100

mientras urlHelper.Action("Edit", "Project", new { id = (int?) null }); vuelve http://hostname/Project/Edit

Cuestiones relacionadas