142 votes

Paramètres Url.Action ?

Dans la liste des contrôleurs, 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 pour le nom john. mais lorsque je donne le code contact="calgary, vancouver" la page web s'affiche en erreur.

Comment puis-je appeler deux paramètres dans la fonction Url.Action . J'ai essayé la méthode ci-dessous, mais elle ne semble pas correcte non plus.

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

245voto

Darin Dimitrov Points 528142

Le texte suivant est la surcharge correcte (dans votre exemple, il manque une fermeture). } à la routeValues (il s'agit d'un objet anonyme, de sorte que votre code lèvera 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 les balises suivantes :

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

qui invoquera avec succès le GetByList en passant les deux paramètres :

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

0 votes

@user787788, quel est le problème rencontré ? Que voulez-vous dire par n'acceptant pas deux paramètres ? Qui n'accepte pas ? Recevez-vous un message d'erreur ? L'action de votre contrôleur n'est pas validée ? Obtenez-vous des valeurs erronées ? Soyez précis.

0 votes

Lorsque je donne deux paramètres, la page aspx ne frappe même pas le contrôleur. Elle trouve l'erreur dans la page elle-même. J'ai une exception défalcation appelée quelque chose qui ne va pas. l'aspx y va.

0 votes

@user787788, quelle est l'erreur ? Quel est le message exact que vous obtenez ?

13voto

César León Points 1974

Cela fonctionne pour MVC 5 :

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>

0 votes

Qu'est-ce que item, comme dans item.paramValue1 ?

0 votes

Item.paramValue1 peut être n'importe quel texte/chaîne de caractères

4voto

Bart Points 2804

Vous pouvez retourner une collection privée nommée HttpValueCollection même si la documentation indique qu'il s'agit d'une NameValueCollection en utilisant l'utilitaire ParseQueryString. Ajoutez ensuite les clés manuellement, HttpValueCollection se chargeant de l'encodage pour vous. Il suffit ensuite d'ajouter manuellement la chaîne de requête :

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>

1voto

Clark Kent Points 5845

Voici une autre façon simple de procéder

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

Où se trouve @Model.ID est un paramètre

Et voici un deuxième exemple.

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

0voto

RainyTears Points 73

Vous pouvez également effectuer les opérations suivantes sur ASP.Net MVC

<a href="@Url.Action("GetByList", "Listing",new {area = "Admin"})'
+ @Model.Id + '?name ="John"&contact ="calgary, vancouver"'+'"'>
    <span>People</span>
</a>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X