我正在jquery中编写一个函数,它将数据发布到控制器。目前它正在将表单数据发布到控制器中,但是当我发布带有表单数据的复选框列表时,它总是在控制器中发送计数0这里是我的代码。
function SubmitForm() {
var studentFormData = $("#frmStudent").serialize();
debugger;
var SubjectArraydata = new Array();
$(".chkSubject:checked").each(function () {
var row = {
"SubjectId": $(this).data("id")
};
SubjectArraydata.push(row);
});
$.ajax({
url: '@Url.Action("StudentForm", "Student")',
type: "POST",
dataType: "json",
data: studentFormData + JSON.stringify("&subjectData=" + SubjectArraydata),
async: true,
success: function (msg) {
},
error: function () {
}
});
}
控制器:
[HttpPost]
public ActionResult StudentForm(Student student, List<Subject> subjectData)
{
return Json(true);
}
任何人都告诉我代码中的问题在哪里谢谢。
答案 0 :(得分:1)
您无法混合'application/x-www-form-urlencoded'
数据(contentType
方法的serialize()
)和'application/json'
数据(contentType
方法的JSON.stringify()
)那样的。
如果您确认自己只提交了Subject
的{{1}}属性SubjectId
并且类型为int
,那么您可以将SubjectId
值附加到序列化数据
var studentFormData = $("#frmStudent").serialize();
$(".chkSubject:checked").each(function () {
studentFormData += '&' + $.param({ SubjectIds: $(this).data("id") });
};
$.ajax({
url: '@Url.Action("StudentForm", "Student")',
type: "POST",
dataType: "json",
data: studentFormData,
success: function (msg) {
},
error: function () {
}
});
并将您的控制器方法更改为
[HttpPost]
public ActionResult StudentForm(Student student, List<int> SubjectIds)
{
....
答案 1 :(得分:0)
我认为你没有正确使用'POST'方法。您尝试将发送数据混合为json和url参数。
data: studentFormData + JSON.stringify("&subjectData=" + SubjectArraydata),
您发送的数据:
[
{...},
[{SubjectId: ''}, {SubjectId: ''}]
]
或:
{
1: {...},
subjectData: [{SubjectId: ''}, {SubjectId: ''}]
}
或某些数据以json形式发送,有些数据在url中?
在json中发送所有数据,不要序列化(jquery为你做):
var data = [strudentFormData, subjectData];
$.ajax(..., data: data, ...);