Saya mencoba untuk melewatkan array objek ke dalam metode pengontrol MVC menggunakan fungsi ajax () jQuery. Ketika saya masuk ke metode pengontrol PassThing () C #, argumen "hal" adalah null. Saya sudah mencoba ini menggunakan tipe List untuk argumennya, tetapi itu juga tidak berhasil. Apa yang saya lakukan salah?
<script type="text/javascript">
$(document).ready(function () {
var things = [
{ id: 1, color: 'yellow' },
{ id: 2, color: 'blue' },
{ id: 3, color: 'red' }
];
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/Xhr/ThingController/PassThing',
data: JSON.stringify(things)
});
});
</script>
public class ThingController : Controller
{
public void PassThing(Thing[] things)
{
// do stuff with things here...
}
public class Thing
{
public int id { get; set; }
public string color { get; set; }
}
}
c#
asp.net-mvc
jquery
Tenang
sumber
sumber
Jawaban:
Dengan menggunakan saran NickW, saya bisa membuatnya berfungsi menggunakan
things = JSON.stringify({ 'things': things });
Berikut ini kode lengkapnya.Ada dua hal yang saya pelajari dari ini:
Pengaturan contentType dan dataType mutlak diperlukan dalam fungsi ajax (). Itu tidak akan berhasil jika mereka hilang. Saya menemukan ini setelah banyak trial and error.
Untuk meneruskan larik objek ke metode pengontrol MVC, cukup gunakan format JSON.stringify ({'things': things}).
Saya harap ini membantu orang lain!
sumber
http://localhost:52459/Sales/completeSale?itemsInCart=[{"ItemId":1,"Quantity":"1","Price":3.5}]
danSales.completeSale
inipublic ActionResult completeSale(ItemInCart[] itemsInCart)
, dijelaskan sebagaiHttpGet
.data: JSON.stringify(things),
dataType
tidak perlu. Jika dihilangkan, fungsi ajax akan menyelesaikannya berdasarkan data yangTidak bisakah kamu melakukan ini?
... dan tandai tindakan Anda dengan
sumber
Memformat data Anda yang mungkin menjadi masalah. Coba salah satu dari ini:
Atau (dari Bagaimana saya bisa memposting array string ke ASP.NET MVC Controller tanpa formulir? )
sumber
Saya menggunakan Aplikasi Web .Net Core 2.1 dan tidak bisa mendapatkan satu jawaban pun di sini untuk berfungsi. Saya mendapat parameter kosong (jika metode ini dipanggil sama sekali) atau kesalahan server 500. Saya mulai bermain dengan setiap kemungkinan kombinasi jawaban dan akhirnya mendapatkan hasil yang berhasil.
Dalam kasus saya, solusinya adalah sebagai berikut:
Script - merangkai array asli (tanpa menggunakan properti bernama)
Dan dalam metode pengontrol, gunakan [FromBody]
Kegagalan meliputi:
Memberi nama pada konten
data: {content: node}, // Kesalahan server 500
Tidak memiliki contentType = Kesalahan server 500
Catatan
dataType
tidak diperlukan, terlepas dari apa yang dikatakan beberapa jawaban, karena itu digunakan untuk decoding respons (jadi tidak relevan dengan contoh permintaan di sini).List<Thing>
juga bekerja dalam metode pengontrolsumber
Saya punya jawaban yang sempurna untuk semua ini: Saya mencoba begitu banyak solusi yang tidak bisa akhirnya saya sendiri dapat mengelola, silakan temukan jawaban detail di bawah ini:
Pengontrol
sumber
Satu-satunya cara saya bisa membuat ini berfungsi adalah dengan meneruskan JSON sebagai string dan kemudian deserialise menggunakan
JavaScriptSerializer.Deserialize<T>(string input)
, yang cukup aneh jika itu adalah deserializer default untuk MVC 4.Model saya memiliki daftar objek bersarang dan yang terbaik yang bisa saya peroleh dengan menggunakan data JSON adalah daftar paling atas untuk memiliki jumlah item yang benar di dalamnya, tetapi semua bidang dalam item tersebut null.
Hal semacam ini seharusnya tidak terlalu sulit.
sumber
Ini adalah kode yang berfungsi untuk kueri Anda, Anda dapat menggunakannya.
Pengontrol
javascript
sumber
Membungkus daftar objek Anda dengan objek lain yang berisi properti yang sesuai dengan nama parameter yang diharapkan oleh pengontrol MVC bekerja. Bit yang penting menjadi pembungkus di sekitar daftar objek.
sumber
sumber
Jika Anda menggunakan ASP.NET Web API maka Anda harus lulus
data: JSON.stringify(things)
.Dan pengontrol Anda akan terlihat seperti ini:
sumber
Modifikasi dari @veeresh i
sumber
Apa yang saya lakukan ketika mencoba mengirim beberapa data dari beberapa baris yang dipilih dalam tindakan DataTable ke MVC:
HTML Di awal halaman:
(hanya satu baris yang ditampilkan, ikat dari model):
Tombol yang memulai fungsi JavaScript:
Fungsi JavaScript:
Tindakan MVC:
Dan MODEL di C #:
KESIMPULAN:
Alasan ERROR:
Atribut Is:
[ValidateAntiForgeryToken]
untuk aksi MVCStartWorkflow
Solusi dalam panggilan Ajax:
Untuk mengirim List of object Anda perlu membentuk data seperti di contoh (mengisi list object) dan:
data: {model: list},
ketik: "post",
sumber
Beginilah cara kerjanya dengan baik bagi saya:
Dengan "ContentType" dengan huruf besar "C".
sumber