Jquery函数始终返回第二个参数的计数0

时间:2017-06-16 12:42:58

标签: javascript c# jquery asp.net-mvc

我正在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); 
} 

任何人都告诉我代码中的问题在哪里谢谢。

2 个答案:

答案 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, ...);