Saya mencoba untuk melewatkan array (atau IEnumerable) int dari melalui AJAX ke tindakan MVC dan saya butuh sedikit bantuan.
javascript-nya
$.get('/controller/MyAction', { vals: arrayOfValues }, function (data) {...
dan tindakan pengontrol adalah
public ActionResult MyAction(IEnumerable<int> arrayOfValues )
Saat ini permintaan diformat sebagai
controller/MyAction?_=1301503418429&arrayOfValues[]=491&arrayOfValues[]=368&arrayOfValues[]=235&arrayOfValues[]=437
Jadi saya hampir sampai, jika saya melepas tanda kurung siku, saya mendapatkan jawaban yang benar. Bagaimana saya harus meneruskan array itu ke get saya sehingga pengontrol dapat mengenali apa itu?
Terima kasih banyak atas bantuanmu
Dave
c#
asp.net-mvc
jquery
Dave
sumber
sumber
Saya memiliki masalah di masa lalu ketika mencoba melakukan POST (tidak yakin apakah itu yang Anda lakukan, tetapi saya ingat ketika mengirimkan array, tradisional harus disetel ke true .
sumber
Jawaban yang agak terlambat, tetapi berbeda dengan yang sudah ada di sini:
Jika alih-alih
$.ajax
Anda ingin menggunakan fungsi singkatan$.get
atau$.post
, Anda dapat meneruskan array dengan cara ini:Singkatan GET
POST Singkatan
Catatan:
$.param
adalah untuktraditional
properti, yang HARUS digunakantrue
untuk ini .sumber
Anda seharusnya dapat melakukan ini dengan baik:
Maka metode tindakan Anda akan seperti ini:
Bagi Anda, sepertinya Anda hanya perlu merangkai nilai-nilai Anda. JSONValueProvider di MVC akan mengubahnya kembali menjadi IEnumerable untuk Anda.
sumber
Jawaban untuk menggunakan opsi 'tradisional' benar. Saya hanya memberikan beberapa info latar belakang lainnya untuk ini yang ingin mempelajari lebih lanjut.
Dari dokumentasi jQuery:
Anda juga dapat membaca lebih lanjut di sini: http://michaelsync.net/2012/04/05/tips-asp-net-mvc-javascriptserializer-3-questions-and-3-answers dan http://haacked.com/archive /2008/10/23/model-binding-to-a-list.aspx
HTH
sumber
JIKA SEMUA ORANG LAIN GAGAL ...
Tidak ada jawaban lain di sini yang memecahkan masalah saya. Saya mencoba membuat panggilan metode GET dari JavaScript ke pengontrol MVC Web API, dan mengirim array bilangan bulat sebagai parameter dalam permintaan itu. Saya mencoba semua solusi di sini, tetapi parameter pada pengontrol saya tetap muncul NULL (atau Tidak ada untuk Anda pengguna VB).
Saya akhirnya menemukan solusi saya di posting SO yang berbeda , dan itu sebenarnya sangat sederhana: Cukup tambahkan
[FromUri]
penjelasan sebelum parameter array di controller ( saya juga harus membuat panggilan menggunakan pengaturan AJAX "tradisional" untuk menghindari penjelasan braket ). Lihat di bawah untuk kode sebenarnya yang saya gunakan dalam aplikasi saya.Tanda Tangan Pengontrol:
CATATAN: Anotasi di C # adalah
[FromUri]
JavaScript:
String URL Sebenarnya:
sumber
Agak terlambat di sini, tetapi saya bisa menggunakan solusi SNag lebih jauh ke $ .ajax (). Inilah kodenya jika itu akan membantu siapa pun:
sumber
Jika Anda bermigrasi ke ASP.NET Core MVC dari .Net Framework MVC seperti saya, banyak hal telah berubah sedikit. Panggilan ajax harus berada pada objek mentah menggunakan stringify jadi daripada meneruskan datanya
{ vals: arrayOfValues }
harusJSON.stringify(arrayOfValues)
seperti berikut:Perubahan lain yang telah dibuat di ASP.NET Core adalah untuk mencegah pemalsuan permintaan lintas situs sehingga untuk panggilan ke tindakan MVC dari metode ajax
[FromBody]
atribut harus diterapkan ke parameter tindakan sebagai berikut:sumber
Jika Anda menggunakan ASP.NET Core MVC dan perlu menangani tanda kurung siku (daripada menggunakan opsi "tradisional" jQuery), satu-satunya opsi yang saya temukan adalah secara manual membangun
IEnumerable
dalam metode contoller.sumber
Saya bekerja dengan asp.net core 2.2 dan jquery dan harus mengirimkan objek kompleks ('kelas utama') dari pandangan ke pengontrol dengan bidang data sederhana dan beberapa larik.
Segera setelah saya menambahkan array dalam definisi c # 'kelas utama' (lihat di bawah) dan mengirimkan array (terisi dengan benar) melalui ajax (post), seluruh objek adalah null di controller.
Pertama, saya pikir, "tradisional: benar" yang hilang, pada panggilan ajax saya adalah alasannya, tetapi ini tidak terjadi.
Dalam kasus saya, alasannya adalah definisi di c # 'kelas utama'.
Di 'kelas utama', saya memiliki:
dan EreignisTagNeu didefinisikan sebagai:
Saya harus mengubah definisi di 'kelas utama' menjadi:
Sekarang berhasil.
Jadi ... bagi saya sepertinya inti asp.net memiliki masalah (dengan posting), jika daftar untuk array tidak sepenuhnya ditentukan di 'kelas utama'.
Catatan: Dalam kasus saya ini bekerja dengan atau tanpa "tradisional: true", ke panggilan ajax
sumber
Anda perlu mengubah Array menjadi string:
ini bekerja bahkan dalam bentuk int, long atau string
sumber