128

In listing controller I have,

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

In ASPX page I call,

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

I have a problem in the ASPX code... I can pull the records for the name john. but when I give the contact="calgary, vancouver", the webpage goes to error.

How can I call two parameters in the Url.Action. I tried the below but that seems wrong too.

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>
Selim Yildiz
  • 4,224
  • 6
  • 14
  • 25
user787788
  • 1,415
  • 2
  • 9
  • 6

4 Answers4

219

The following is the correct overload (in your example you are missing a closing } to the routeValues anonymous object so your code will throw an exception):

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

Assuming you are using the default routes this should generate the following markup:

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

which will successfully invoke the GetByList controller action passing the two parameters:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
  • 960,118
  • 257
  • 3,196
  • 2,876
  • @user787788, what problem are you getting? What do you mean *not accepting two parameters*? Who is not accepting? Are you getting an error message? Is your controller action not hit? Are you getting wrong values? Be specific. – Darin Dimitrov Jun 08 '11 at 12:43
  • When i give two parameters, the aspx page is not even hitting the controller. its finding the error in the page itself. i have a defalut exception called something gone worng. the aspx goes there – user787788 Jun 08 '11 at 12:46
  • @user787788, what is the error? Exact message you are getting? – Darin Dimitrov Jun 08 '11 at 12:55
  • the error is , you may have typed the address (URL) incorrectly. – user787788 Jun 08 '11 at 12:56
  • 2
    @DarinDimitrov, i know this is a *very* old post, but i saw you were online. I don't suppose you'd know how to pass a parameter dynamically (not hardcoded like "John")? –  Sep 30 '14 at 15:20
  • @user3913686 Here is an example of what you can place in your view file: '@Url.Action("GetOverviewAsDocument", "FileAssignment", new { customerId = ViewData["customerId"] } )' – Thorkil Værge Mar 22 '18 at 15:33
11

This works for MVC 5:

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

you can returns a private collection named HttpValueCollection even the documentation says it's a NameValueCollection using the ParseQueryString utility. Then add the keys manually, HttpValueCollection do the encoding for you. And then just append the QueryString manually :

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
  • 17,850
  • 9
  • 72
  • 108
0

Here is another simple way to do it

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

Where is @Model.ID is a parameter

And here there is a second example.

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