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>

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) 
{
    ...
}

@ 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>

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>

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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.