【问题标题】:Jquery Function always return count 0 of second parameterJquery 函数总是返回第二个参数的计数 0
【发布时间】:2017-06-16 12:42:57
【问题描述】:

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

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

【问题讨论】:

  • 你在控制器端得到了什么?
  • 我准确地获得了学生表格数据,但 subjectData 总是返回 0
  • 在哪里返回 0?一点都不清楚
  • 显示你的控制器
  • 为什么是JSON.stringify(...)?如果 subjectData 应该是 JSON,那么只在 SubjectArraydata 上调用 JSON.stringify() 否则它没有多大意义......

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


【解决方案1】:

您不能像这样混合'application/x-www-form-urlencoded' 数据(serialize() 方法的contentType)和'application/json' 数据(JSON.stringify() 方法的contentType)。

如果您已经确认您只提交了Subject 的一个属性,即SubjectId 并且typeof 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)
{ 
    ....

【讨论】:

  • 谢谢@Stephen,它工作正常。谢谢你的指导。
  • 顺便说一句,实际使用视图模型并基于该视图模型生成表单控件将更加“MVC”,因此所需要的只是$("#frmStudent").serialize() - 例如生成复选框集合,请参阅this answer
【解决方案2】:

我认为您使用的“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, ...);

【讨论】:

  • 这两个数据都是空的
  • 试试这个:var data = {student: studentFormData, subjectData: subjectArraydata}。 studentFormData 和 subjectArraydata 都必须是对象,而不是字符串
猜你喜欢
  • 2016-10-28
  • 2016-07-21
  • 1970-01-01
  • 2014-12-17
  • 2012-10-28
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多