【发布时间】:2018-05-18 14:32:03
【问题描述】:
这是我的脚本:
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
function btnadHocSave() {
debugger
var lv_header = $("#Header").serializeObject(); // this is header <fieldset> tag
var lv_detail = $("#SubmitMachine").serializeObject(); // this is detail <fieldset> tag
$.ajax({
type: "POST",
url: '@Url.Action("UpdateMachine")',
contentType: "application/json",
dataType: "JSON",
data: {
myheader: lv_header,
mydetail: lv_detail
},
cache: false,
success: function (data) {
alert("Success!..");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError);
}
})
}
这是我的操作代码。 PMAllotmentEntry 和 PMAllotmentDetailEntry 是模型:
public ActionResult UpdateMachine(PMAllotmentEntry myheader, PMAllotmentDetailEntry mydetail)
{
return View();
}
现在我的问题是我无法将值从视图获取到控制器。
我也试过JSON.stringify,但没有用。
如果我传递单个 JSON 值,它就可以工作。
我尝试了所有的可能性。也照你说的做了,但没用。最后我做了以下。我得到了两个 JSON 值,但仍然面临一个问题,因为 JSON 第二个值的第一个字段值与第一个 JSON 值一起出现。
function btnadHocSave() {
debugger
var lv_header = $("#Header").serialize(); // this is header <fieldset>
var lv_detail = $("#SubmitMachine").serialize();
$.ajax(
{
type: "GET",
url: '/PMAllotments/UpdateMachine',
contentType: "application/json",
dataType: "JSON",
data: lv_header + ',' + lv_detail,
success: function (data) {
alert("Success!..");
debugger
$("#adHocAdd40").modal("hide");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError);
}
})
}
【问题讨论】:
-
首先,您需要使用
data: JSON.stringify({ myheader: lv_header, mydetail: lv_detail}),,但为什么要使用serializeObject()功能(一旦您拥有bool属性,该功能就会失败)以及您发送数据的事实这样表明您没有正确生成视图 -
最好的方法是创建一个新类并将这些“PMAllotmentEntry myheader, PMAllotmentDetailEntry mydetail”类放入一个类中。
-
关于您的编辑 - 删除
contentType选项及其data: lv_header + '&' + lv_detail,(但假设您的视图生成正确 - 但您没有显示任何内容 - 以及您编写此代码的事实建议你没有)
标签: json asp.net-mvc entity-framework view controller