Parâmetros Url.Action?

116

Ao listar o controlador que tenho,

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

Na página ASPX, eu chamo,

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

Estou com um problema no código ASPX ... Consigo obter os registros para o nome john. mas quando eu dou o contact="calgary, vancouver", a página da web vai para o erro.

Como posso chamar dois parâmetros no Url.Action. Tentei o seguinte, mas também parece errado.

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

Respostas:

207

A seguir está a sobrecarga correta (em seu exemplo, você está perdendo um fechamento }para o routeValuesobjeto anônimo, portanto, seu código lançará uma exceção):

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

Supondo que você esteja usando as rotas padrão, isso deve gerar a seguinte marcação:

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

que invocará com sucesso a GetByListação do controlador passando os dois parâmetros:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
fonte
@ user787788, que problema você está tendo? O que quer dizer com não aceitar dois parâmetros ? Quem não está aceitando? Você está recebendo uma mensagem de erro? A ação do seu controlador não foi atingida? Você está obtendo valores errados? Seja específico.
Darin Dimitrov
Quando dou dois parâmetros, a página aspx nem chega ao controlador. é encontrar o erro na própria página. eu tenho uma exceção de defalut chamada algo que se desgastou. o aspx vai lá
user787788
@ user787788, qual é o erro? Mensagem exata que você está recebendo?
Darin Dimitrov
o erro é que você pode ter digitado o endereço (URL) incorretamente.
user787788
2
@DarinDimitrov, sei que é um post muito antigo, mas vi que você estava online. Suponho que você não saiba como passar um parâmetro dinamicamente (não codificado como "John").
8

Isso funciona para MVC 5:

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

você pode retornar uma coleção privada chamada HttpValueCollection mesmo que a documentação diga que é um NameValueCollection usando o utilitário ParseQueryString. Em seguida, adicione as chaves manualmente, HttpValueCollection faz a codificação para você. E então basta anexar o QueryString manualmente:

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
fonte
0

Aqui está outra maneira simples de fazer isso

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

Onde está @Model.IDé um parâmetro

E aqui está um segundo exemplo.

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