我有一个类似的课程:
public class EditItem
{
public int ItemId { get; set; }
public string ItemName { get; set; }
public string SerialNumber { get; set; }
public string BrandName { get; set; }
public int? Quantity { get; set; }
public string Description { get; set; }
public int? UserAccountId { get; set; }
}
和像这样的控制器:
public ActionResult EditItem(EditItem item)
{
var im = new ItemManager();
return Json(im.EditItem(item));
}
在我看来,我有这样的脚本和ajax帖子一样:
function EditItem(obj) {
this.ItemId = obj.ItemId;
this.ItemName = obj.ItemName;
this.SerialNumber = obj.SerialNumber;
this.BrandName = obj.BrandName;
this.Quantity = obj.Quantity;
this.Description = obj.Description;
this.UserAccountId = obj.UserAccountId;
}
$('#tbl_items').on('click', '.btn_edit', function () {
var $tr = $(this).closest('tr');
var itemid = $tr.find('td[data-itemid]').data('itemid');
var itemname = $tr.find('td[data-itemname]').data('itemname');
var serialnumber = $tr.find('td[data-serialnumber]').data('serialnumber');
var brandname = $tr.find('td[data-brandname]').data('brandname');
var quantity = $tr.find('td[data-quantity]').data('quantity');
var description = $tr.find('td[data-description]').data('description');
var obj = {};
obj.ItemId = itemid;
obj.ItemName = itemname;
obj.SerialNumber = serialnumber;
obj.BrandName = brandname;
obj.Quantity = quantity;
obj.Description = description;
obj.UserAccountId = 0;
edit_item(obj);
});
function edit_item(data) {
$.ajax({
type: 'POST',
url: '@Url.Action("EditItem", "Item")',
data: { item: JSON.stringify(data) }, <===== This is not passed to the controller
success: function(result) {
alert("saved);
} else {
alert("false");
}
}
});
}
为什么我的data: { item: JSON.stringify(data) }
不被我的控制器接受?这是我在console.log()上得到的:
{ “项目Id”:4 “ITEMNAME”: “ghjk”, “的SerialNumber”: “ghjk”, “名优产品”: “GHK”, “数量”:4, “描述”: “hdfh”,“UserAccountId “:0}
名称与我的模型完全相同,但控制器仍然不接受它。我实际上可以手动让控制器接收不同的值,但我想将其作为对象发送。
答案 0 :(得分:1)
请传递
data: { item: JSON.stringify(data) }
为data: data
它不需要具有名为item
的属性的另一个对象并且它也不需要进行JSON字符串化。我们可以直接传递对象。