Parameter Url.Action?

116

Dalam daftar pengontrol yang saya miliki,

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

Di halaman ASPX saya sebut,

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

Saya memiliki masalah dalam kode ASPX ... Saya dapat menarik catatan untuk nama john. tetapi ketika saya memberikannya contact="calgary, vancouver", halaman web mengalami kesalahan.

Bagaimana cara memanggil dua parameter dalam file Url.Action. Saya mencoba yang di bawah ini tetapi sepertinya itu juga salah.

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

Jawaban:

207

Berikut ini adalah kelebihan yang benar (dalam contoh Anda, Anda kehilangan penutup }ke routeValuesobjek anonim sehingga kode Anda akan memunculkan pengecualian):

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

Dengan asumsi Anda menggunakan rute default, ini akan menghasilkan markup berikut:

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

yang akan berhasil memanggil GetByListaksi pengontrol dengan melewatkan dua parameter:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
sumber
@ user787788, masalah apa yang Anda dapatkan? Apa maksud Anda tidak menerima dua parameter ? Siapa yang tidak menerima? Apakah Anda mendapatkan pesan kesalahan? Apakah tindakan pengontrol Anda tidak terkena? Apakah Anda mendapatkan nilai yang salah? Bersikaplah spesifik.
Darin Dimitrov
Ketika saya memberikan dua parameter, halaman aspx bahkan tidak mengenai controller. itu menemukan kesalahan di halaman itu sendiri. Saya memiliki pengecualian defalut yang disebut sesuatu yang tidak berfungsi. aspx pergi ke sana
pengguna787788
@ user787788, apa kesalahannya? Pesan persis yang Anda terima?
Darin Dimitrov
kesalahannya adalah, Anda mungkin salah mengetik alamat (URL).
pengguna787788
2
@DarinDimitrov, saya tahu ini adalah posting yang sangat lama, tetapi saya melihat Anda online. Saya kira Anda tidak akan tahu cara meneruskan parameter secara dinamis (bukan hardcode seperti "John")?
8

Ini berfungsi untuk MVC 5:

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

Anda bisa mengembalikan koleksi pribadi bernama HttpValueCollection bahkan dokumentasinya mengatakan itu adalah NameValueCollection menggunakan utilitas ParseQueryString. Kemudian tambahkan kunci secara manual, HttpValueCollection melakukan encoding untuk Anda. Dan kemudian tambahkan QueryString secara manual:

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

Berikut cara sederhana lainnya untuk melakukannya

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

Dimana ada @Model.IDparameter

Dan di sini ada contoh kedua.

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