Paramètres Url.Action?

116

En listant le contrôleur que 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 que 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 quand je donne le contact="calgary, vancouver", la page Web va à l'erreur.

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

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

Réponses:

207

Ce qui suit est la surcharge correcte (dans votre exemple, vous manquez une fermeture }à l' routeValuesobjet anonyme afin 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 utilisez les routes 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 appellera avec succès l' GetByListaction du contrôleur en passant les deux paramètres:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
la source
@ user787788, quel problème rencontrez-vous? Que voulez-vous dire ne pas accepter deux paramètres ? Qui n'accepte pas? Recevez-vous un message d'erreur? L'action de votre contrôleur n'est-elle pas touchée? Avez-vous de mauvaises valeurs? Être spécifique.
Darin Dimitrov
Quand je donne deux paramètres, la page aspx n'atteint même pas le contrôleur. sa recherche de l'erreur dans la page elle-même. J'ai une exception de défaut appelée quelque chose qui est devenu usé. l'aspx y va
user787788
@ user787788, quelle est l'erreur? Message exact que vous recevez?
Darin Dimitrov
l'erreur est que vous avez peut-être mal saisi l'adresse (URL).
user787788
2
@DarinDimitrov, je sais que c'est un très vieux message, mais j'ai vu que vous étiez en ligne. Je suppose que vous ne sauriez pas comment passer un paramètre dynamiquement (pas codé en dur comme "John")?
8

Cela fonctionne pour MVC 5:

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

vous pouvez retourner une collection privée nommée HttpValueCollection même si la documentation indique qu'il s'agit d'un NameValueCollection à l'aide de l'utilitaire ParseQueryString. Ajoutez ensuite les clés manuellement, HttpValueCollection effectue l'encodage pour vous. Et puis ajoutez simplement le 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>
Bart Calixto
la source
0

Voici une autre façon simple de le faire

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

@Model.IDest un paramètre

Et ici, il y a 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>
Développeur
la source