¿Cómo puedo generar un URL que apunta a un controlador de acción a partir de un método auxiliar fuera de la controladora?

InformationsquelleAutor Shawn Mclean | 2011-02-05

4 Comentarios

  1. 0

    Pasar UrlHelper a su función de ayuda y, a continuación, puede 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
    }
    • umm, si usted ya tiene el UrlHelper, ¿por qué llamar a este método?
    • OP tiene un ayudante, él necesita la dirección en que helper, estoy sugiriendo que passin UrlHelper a su ayudante para generar la url que quiere. He editado mi respuesta para que sea más claro lo que estoy tratando de sugerir.
    • Cant I acceso UrlHelper de una clase estática o algo construido en asp.net mvc? Sin pasar el UrlHelper.
    • No es útil para implementar, por ejemplo, de sólo-lectura Url de la propiedad en una clase del modelo.
  2. 78

    Puede utilizar el siguiente si usted tiene acceso a la HttpContext:

    var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
    • gracias….mucho 😉
    • Esta realidad debería ser la respuesta correcta. Acaba de pasar el objeto en el método actual (respuesta correcta) es un poco demasiado obvio y no es UrlHelper específicos.
    • Fue capaz de proporcionar a través de la inyección (Autofac) con la siguiente línea; builder.Register(context => new UrlHelper(context.Resolve<RequestContext>())).InstancePerRequest();
    • vale la pena decir, usando la System.Web.Mvc espacio de nombres y no de la System.Web.Http.Routing, porque esta clase es que existe, en esos dos nombres
    • usted salvó mi día!
  3. 2

    Utilizando L01NL la respuesta, puede ser importante tener en cuenta que el método de Acción también tendrá parámetro actual (si se proporciona). E. g:

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

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

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

  4. 1

    Ya que usted probablemente desea utilizar el método de un punto de Vista, debe utilizar el Url propiedad de la vista. Es de tipo UrlHelper, que le permite hacer

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

    Si quieres evitar ese tipo de cadena de referencias en su opinión, podría escribir los métodos de extensión en UrlHelper que crea para usted:

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

    que sería así:

    <%: Url.UrlToTheControllerTheAction() %>

Dejar respuesta

Please enter your comment!
Please enter your name here