¿Parámetros de url.Action?

116

En la lista del controlador tengo,

 public ActionResult GetByList(string name, string contact)
 {        
     var NameCollection = Service.GetByName(name);    
     var ContactCollection = Service.GetByContact(contact);           
     return View(new ListViewModel(NameCollection ,ContactCollection));
 }

En la página ASPX llamo,

 <a href="<%:Url.Action("GetByList","Listing" , new {name= "John"} , new {contact="calgary, vancouver"})%>"><span>People</span></a>

Tengo un problema en el código ASPX ... Puedo extraer los registros del nombre john. pero cuando doy el contact="calgary, vancouver", la página web tiene un error.

¿Cómo puedo llamar a dos parámetros en Url.Action. Intenté lo siguiente, pero eso también parece incorrecto.

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>
user787788
fuente

Respuestas:

207

La siguiente es la sobrecarga correcta (en su ejemplo, le falta un cierre }del routeValuesobjeto anónimo, por lo que su código arrojará una excepción):

<a href="<%: Url.Action("GetByList", "Listing", new { name = "John", contact = "calgary, vancouver" }) %>">
    <span>People</span>
</a>

Suponiendo que está utilizando las rutas predeterminadas, esto debería generar el siguiente marcado:

<a href="/Listing/GetByList?name=John&amp;contact=calgary%2C%20vancouver">
    <span>People</span>
</a>

que invocará con éxito la GetByListacción del controlador pasando los dos parámetros:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
fuente
@ user787788, ¿qué problema tienes? ¿Qué quieres decir con no aceptar dos parámetros ? ¿Quién no acepta? ¿Está recibiendo un mensaje de error? ¿La acción de su controlador no es impactada? ¿Está obteniendo valores incorrectos? Se específico.
Darin Dimitrov
Cuando doy dos parámetros, la página aspx ni siquiera llega al controlador. es encontrar el error en la propia página. Tengo una excepción defalut llamada algo que salió mal. el aspx va allí
user787788
@ user787788, ¿cuál es el error? ¿Mensaje exacto que está recibiendo?
Darin Dimitrov
el error es que puede haber escrito la dirección (URL) de forma incorrecta.
user787788
2
@DarinDimitrov, sé que esta es una publicación muy antigua, pero vi que estabas en línea. Supongo que no sabría cómo pasar un parámetro dinámicamente (no codificado como "John").
8

Esto funciona para MVC 5:

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>
César León
fuente
4

puede devolver una colección privada llamada HttpValueCollection incluso la documentación dice que es una NameValueCollection usando la utilidad ParseQueryString. Luego agregue las claves manualmente, HttpValueCollection hará la codificación por usted. Y luego simplemente agregue el QueryString manualmente:

var qs = HttpUtility.ParseQueryString(""); 
qs.Add("name", "John")
qs.Add("contact", "calgary");
qs.Add("contact", "vancouver")

<a href="<%: Url.Action("GetByList", "Listing")%>?<%:qs%>">
    <span>People</span>
</a>
Bart Calixto
fuente
0

Aquí hay otra forma sencilla de hacerlo.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID'>Print</a>

Donde es @Model.IDes un parámetro

Y aquí hay un segundo ejemplo.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
Desarrollador
fuente