EDIT : 31/10/2017
Kode / pendekatan yang sama juga akan bekerja untuk Asp.Net Core 2.0 . Perbedaan utama adalah, Pada inti asp.net, baik pengontrol api web dan pengontrol Mvc digabung bersama menjadi model pengontrol tunggal. Jadi jenis laba mungkin IActionResultatau salah satu dari itu implementasi (Ex: OkObjectResult)
Menggunakan
contentType:"application/json"
Anda perlu menggunakan JSON.stringifymetode untuk mengubahnya menjadi string JSON ketika Anda mengirimnya,
Dan pengikat model akan mengikat data json ke objek kelas Anda.
Kode di bawah ini akan berfungsi dengan baik (diuji)
$(function () {
var customer = {contact_name :"Scott",company_name:"HP"};
$.ajax({
type: "POST",
data :JSON.stringify(customer),
url: "api/Customer",
contentType: "application/json"
});
});
Hasil

contentTypeproperti memberi tahu server bahwa kami mengirim data dalam format JSON. Karena kami mengirim struktur data JSON, pengikatan model akan terjadi dengan benar.
Jika Anda memeriksa tajuk permintaan ajax, Anda dapat melihat bahwa Content-Typenilainya ditetapkan sebagai application/json.
Jika Anda tidak menentukan tipe konten secara eksplisit, itu akan menggunakan tipe konten default yang application/x-www-form-urlencoded;
Edit pada November 2015 untuk mengatasi masalah lain yang mungkin muncul dalam komentar
Posting objek yang kompleks
Katakanlah Anda memiliki kelas model tampilan kompleks sebagai parameter metode aksi api web Anda seperti ini
public class CreateUserViewModel
{
public int Id {set;get;}
public string Name {set;get;}
public List<TagViewModel> Tags {set;get;}
}
public class TagViewModel
{
public int Id {set;get;}
public string Code {set;get;}
}
dan titik api web Anda seperti
public class ProductController : Controller
{
[HttpPost]
public CreateUserViewModel Save([FromBody] CreateUserViewModel m)
{
// I am just returning the posted model as it is.
// You may do other stuff and return different response.
// Ex : missileService.LaunchMissile(m);
return m;
}
}
Pada saat penulisan ini, ASP.NET MVC 6 adalah versi stabil terbaru dan di MVC6, Baik pengendali api web dan pengendali MVC mewarisi dari Microsoft.AspNet.Mvc.Controllerkelas dasar.
Untuk mengirim data ke metode dari sisi klien, kode di bawah ini akan berfungsi dengan baik
//Build an object which matches the structure of our view model class
var model = {
Name: "Shyju",
Id: 123,
Tags: [{ Id: 12, Code: "C" }, { Id: 33, Code: "Swift" }]
};
$.ajax({
type: "POST",
data: JSON.stringify(model),
url: "../product/save",
contentType: "application/json"
}).done(function(res) {
console.log('res', res);
// Do something with the result :)
});
Penjilidan model berfungsi untuk beberapa properti, tetapi tidak semua! Mengapa
Jika Anda tidak menghias parameter metode api web dengan [FromBody]atribut
[HttpPost]
public CreateUserViewModel Save(CreateUserViewModel m)
{
return m;
}
Dan mengirim model (objek javascript mentah, bukan dalam format JSON) tanpa menentukan nilai properti contentType
$.ajax({
type: "POST",
data: model,
url: "../product/save"
}).done(function (res) {
console.log('res', res);
});
Penjilidan model akan berfungsi untuk properti flat pada model, bukan properti di mana jenisnya kompleks / tipe lain. Dalam kasus kami, Iddan Nameproperti akan terikat dengan benar ke parameter m, Tapi Tagsproperti akan menjadi daftar kosong.
Masalah yang sama akan terjadi jika Anda menggunakan versi pendek, $.postyang akan menggunakan Tipe Konten default saat mengirim permintaan.
$.post("../product/save", model, function (res) {
//res contains the markup returned by the partial view
console.log('res', res);
});