पहले डाउनलोड इस जावा स्क्रिप्ट कोड, JSON2.js, इससे हमें ऑब्जेक्ट को स्ट्रिंग में क्रमबद्ध करने में मदद मिलेगी।
मेरे उदाहरण में मैं एक jqGrid की पंक्तियों पोस्टिंग कर रहा हूँ अजाक्स के माध्यम से:
var commissions = new Array();
// Do several row data and do some push. In this example is just one push.
var rowData = $(GRID_AGENTS).getRowData(ids[i]);
commissions.push(rowData);
$.ajax({
type: "POST",
traditional: true,
url: '<%= Url.Content("~/") %>' + AREA + CONTROLLER + 'SubmitCommissions',
async: true,
data: JSON.stringify(commissions),
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data.Result) {
jQuery(GRID_AGENTS).trigger('reloadGrid');
}
else {
jAlert("A problem ocurred during updating", "Commissions Report");
}
}
});
अब नियंत्रक पर:
[HttpPost]
[JsonFilter(Param = "commissions", JsonDataType = typeof(List<CommissionsJs>))]
public ActionResult SubmitCommissions(List<CommissionsJs> commissions)
{
var result = dosomething(commissions);
var jsonData = new
{
Result = true,
Message = "Success"
};
if (result < 1)
{
jsonData = new
{
Result = false,
Message = "Problem"
};
}
return Json(jsonData);
}
एक JsonFilter क्लास (जेएससी संदर्भ के लिए धन्यवाद) बनाएँ।
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;
}
}
}
अन्य वर्ग बनाएँ ताकि फिल्टर वास्तविक manipulable वस्तु को JSON स्ट्रिंग पार्स कर सकते हैं: इस वर्ग comissionsJS मेरी jqGrid की सभी पंक्तियों कर रहे हैं।
public class CommissionsJs
{
public string Amount { get; set; }
public string CheckNumber { get; set; }
public string Contract { get; set; }
public string DatePayed { get; set; }
public string DealerName { get; set; }
public string ID { get; set; }
public string IdAgentPayment { get; set; }
public string Notes { get; set; }
public string PaymentMethodName { get; set; }
public string RowNumber { get; set; }
public string AgentId { get; set; }
}
मुझे आशा है कि यह उदाहरण जटिल वस्तु को पोस्ट करने का तरीका बताएगा।
अच्छा काम यहाँ! – jeffreypriebe
बहुत अच्छा लगता है - ब्लॉग पोस्ट और कस्टम विशेषता कोड लिंक अब और काम नहीं करते हैं - क्या आप दोबारा पोस्ट कर सकते हैं? – littlechris
इस समाधान के लिए ग्राहक और सर्वर पक्ष में परिवर्तन की आवश्यकता है। मुझे पता है कि आपको बहुत पहले इसकी आवश्यकता थी, लेकिन मैं एक अलग दृष्टिकोण के लिए एक लिंक भी प्रदान कर सकता हूं, जो कि एक साधारण jQuery प्लगइन का उपयोग करता है जो किसी भी जावास्क्रिप्ट ऑब्जेक्ट को उस रूप में परिवर्तित करना संभव बनाता है जो डिफ़ॉल्ट मॉडल बाइंडर समझता है और मॉडल पैरामीटर को बाध्य करता है। कोई फ़िल्टर की आवश्यकता नहीं है। http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html मुझे नहीं पता कि आपने सत्यापन त्रुटियों को कैसे हल किया है, लेकिन मेरे पास इसका समाधान भी है: http://erraticdev.blogspot.com/2010/11/handling-validation-errors-on-ajax.html –