Url.Action parametri?


116

Nell'elenco del controller che ho,

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

Nella pagina ASPX chiamo,

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

Ho un problema nel codice ASPX ... posso estrarre i record per il nome john. ma quando do il contact="calgary, vancouver", la pagina web va in errore.

Come posso chiamare due parametri nel file Url.Action. Ho provato il sotto ma anche quello sembra sbagliato.

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

Risposte:


207

Il seguente è l'overload corretto (nel tuo esempio ti manca una chiusura }per l' routeValuesoggetto anonimo, quindi il tuo codice genererà un'eccezione):

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

Supponendo che tu stia utilizzando le rotte predefinite, questo dovrebbe generare il seguente markup:

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

che richiamerà con successo l' GetByListazione del controller passando i due parametri:

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

@ user787788, che problema stai riscontrando? Cosa intendi per non accettare due parametri ? Chi non accetta? stai ricevendo un messaggio di errore? L'azione del tuo controller non è stata colpita? Stai ottenendo valori sbagliati? Sii specifico.
Darin Dimitrov

Quando fornisco due parametri, la pagina aspx non colpisce nemmeno il controller. sta trovando l'errore nella pagina stessa. ho un'eccezione di defalut chiamata qualcosa di usurato. aspx va lì
user787788

@ user787788, qual è l'errore? Messaggio esatto che stai ricevendo?
Darin Dimitrov

l'errore è che potresti aver digitato l'indirizzo (URL) in modo errato.
user787788

2
@DarinDimitrov, so che questo è un post molto vecchio, ma ho visto che eri online. Suppongo che non sapresti come passare dinamicamente un parametro (non codificato come "John")?

8

Questo funziona per MVC 5:

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

4

puoi restituire una raccolta privata denominata HttpValueCollection anche se la documentazione dice che è una NameValueCollection utilizzando l'utilità ParseQueryString. Quindi aggiungi le chiavi manualmente, HttpValueCollection esegue la codifica per te. E poi aggiungi manualmente QueryString:

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>

0

Ecco un altro modo semplice per farlo

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

Dov'è @Model.IDun parametro

E qui c'è un secondo esempio.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.