Saya telah menemukan solusi. Saya menggunakan solusi Steve Gentile, jQuery dan ASP.NET MVC - mengirim JSON ke Action - Revisited .
Kode tampilan ASP.NET MVC saya terlihat seperti:
function getplaceholders() {
var placeholders = $('.ui-sortable');
var results = new Array();
placeholders.each(function() {
var ph = $(this).attr('id');
var sections = $(this).find('.sort');
var section;
sections.each(function(i, item) {
var sid = $(item).attr('id');
var o = { 'SectionId': sid, 'Placeholder': ph, 'Position': i };
results.push(o);
});
});
var postData = { widgets: results };
var widgets = results;
$.ajax({
url: '/portal/Designer.mvc/SaveOrUpdate',
type: 'POST',
dataType: 'json',
data: $.toJSON(widgets),
contentType: 'application/json; charset=utf-8',
success: function(result) {
alert(result.Result);
}
});
};
dan tindakan pengontrol saya dihiasi dengan atribut khusus
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets
Kode untuk atribut khusus dapat ditemukan di sini (tautan rusak sekarang).
Karena tautannya rusak, ini adalah kode untuk JsonFilterAttribute
public class JsonFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Param] = result;
}
}
}
JsonConvert.DeserializeObject berasal dari Json.NET
Tautan: Serialisasi dan Deserialisasi JSON dengan Json.NET
Filter Tindakan, jquery stringify, bleh ...
Peter, fungsi ini asli dari MVC. Itulah salah satu hal yang membuat MVC begitu hebat.
Dan dalam aksinya,
Bekerja seperti pesona:
Jika Anda menggunakan jQuery 1.4+, maka Anda ingin melihat pengaturan mode tradisional:
Seperti dijelaskan di sini: http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters
Ini bahkan berfungsi untuk objek yang kompleks. Jika Anda tertarik, Anda harus melihat dokumentasi MVC tentang Pengikatan Model: http://msdn.microsoft.com/en-us/library/dd410405.aspx
sumber
Di
.NET4.5
,MVC 5
tidak perlu widget.Javascript:
objek di JS:
mekanisme yang memposting.
C #
Objek:
Pengontrol:
Objek diterima:
Semoga ini menghemat waktu Anda.
sumber
Menjelang paruh kedua dari Buat REST API menggunakan ASP.NET MVC yang menggunakan JSON dan XML biasa , mengutip:
Dia kemudian mengimplementasikan filter tindakan yang memetakan JSON ke objek C # dengan kode yang ditampilkan.
sumber
Pertama unduh kode JavaScript ini, JSON2.js , yang akan membantu kami membuat serial objek menjadi string.
Dalam contoh saya, saya memposting baris jqGrid melalui Ajax:
Sekarang di pengontrol:
Buat Kelas JsonFilter (berkat referensi JSC).
Buat kelas lain sehingga filter dapat mengurai string JSON ke objek aktual yang dapat dimanipulasi: Kelas comissionsJS ini adalah semua baris jqGrid saya.
Saya harap contoh ini membantu mengilustrasikan cara memposting objek yang kompleks.
sumber
Ya Tuhan. tidak perlu melakukan sesuatu yang khusus. hanya di bagian posting Anda lakukan sebagai berikut:
Di server gunakan ini:
tautan ini membantu Anda menyelesaikan ...
sumber
sumber