2011-06-08 5 views
84

En la enumeración de controlador que tengo,Url.Parámetros de acción?

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 que 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 tirar de los registros para el nombre de John. pero cuando doy el contacto = "calgary, vancouver", la página web da error.

Cómo puedo llamar dos parámetros en la Acción de Url. Intenté el siguiente, pero eso también parece estar mal.

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

Respuesta

147

La siguiente es la sobrecarga correcta (en su ejemplo se echa en falta un cierre } al objeto anónimo routeValues por lo que su código será una excepción):

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

Suponiendo que está utilizando el valor por defecto rutas este deben generar el siguiente marcado:

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

que invocará con éxito el controlador GetByList la acción de pasar los dos parámetros:

public ActionResult GetByList(string name, string contact) 
{ 
    ... 
} 
+0

@ user787788, qué problema te va? ¿Qué quieres decir con * no aceptar dos parámetros *? ¿Quién no está aceptando? ¿Está recibiendo un mensaje de error? ¿Su acción de controlador no es golpeada? ¿Estás obteniendo valores equivocados? Se específico. –

+0

Cuando doy dos parámetros, la página aspx ni siquiera está presionando el controlador. es encontrar el error en la página en sí. tengo una excepción de defalut llamada algo que no funciona. el aspx va allí – user787788

+0

@ user787788, ¿cuál es el error? ¿Mensaje exacto que estás recibiendo? –

3

que pueda devuelve una colección privada llamada HttpValueCollection incluso la documentación dice que es un NameValueCollection mediante la utilidad ParseQueryString. Luego agregue las claves manualmente, HttpValueCollection haga la codificación por usted. Y luego simplemente añadir manualmente la cadena de consulta:

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>