web-dev-qa-db-fra.com

Paramètres Url.Action?

En listant le contrôleur j'ai,

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

Dans la page ASPX, j'appelle,

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

J'ai un problème dans le code ASPX ... Je peux extraire les enregistrements du nom john. mais quand je donne le contact = "calgary, vancouver", la page Web se trompe.

Comment puis-je appeler deux paramètres dans l'URL.Action. J'ai essayé le ci-dessous mais cela semble faux aussi.

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

La surcharge suivante est correcte (dans votre exemple, il manque un objet de fermeture } de fermeture à l'objet anonyme routeValues de sorte que votre code lève une exception):

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

En supposant que vous utilisiez les itinéraires par défaut, cela devrait générer le balisage suivant:

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

qui invoquera avec succès l'action du contrôleur GetByList en transmettant les deux paramètres:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
187
Darin Dimitrov

Cela fonctionne pour MVC 5:

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

vous pouvez retourner une collection privée nommée HttpValueCollection même si la documentation indique qu'il s'agit d'une NameValueCollection à l'aide de l'utilitaire ParseQueryString. Ajoutez ensuite les clés manuellement, HttpValueCollection effectue l’encodage à votre place. Et ensuite, ajoutez simplement QueryString manuellement:

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>
3
Bart Calixto