使用.NET Core 2.2使用jqery ajax请求将对象数组传递给Controller Action无效

问题描述 投票:0回答:1

字符串化后的对象数组未传递给控制器​​操作,并且操作参数(模型)为null

我已经尝试了StackOverflow中针对此问题的许多解决方案,但这些解决方案均未解决我的问题。我提供了我尝试过的链接:

Pass array to mvc Action via AJAX

pass array in javascript object to mvc controller

这是我的代码

JavaScript Code

$("#FormSubmit").click(function () {
    var datalist = [];

    $("#MarksTable tbody tr").each(function () {

        var obj = {};
        obj.StudentID = 1;
        obj.ExamTimeTableID = 1;
        obj.ClassActivity = $(this).find("td:eq(5) input").val();
        obj.IsPresent = $(this).find("td:eq(7) input").val();
        obj.Assignment = $(this).find("td:eq(6) input").val();
        obj.MidTerm = $(this).find("td:eq(3) input").val();
        obj.Final = $(this).find("td:eq(4) input").val();

        datalist.push(obj);
    });

    $.ajax({
        url: "@Url.Action("InsertData", "Examination")",
        type: "POST",
        cache: false,
        contentType: "application/json;charset=utf-8",
        dataType: "json",
        data: JSON.stringify(datalist),
        success: function (result) {
            alert(result);
        },
        error: function (errormessage) {
            alert(errormessage.responseText);
        }
    });
});

Action of Controller:

[HttpPost]
public JsonResult InsertData([FromBody] List<StudentMarksList> obj)
{

    DynamicParameters param = new DynamicParameters();
    .
    .
    .
    return Json(param.Get<string>("msg"));
}

模型:

public class StudentMarksList
{
    public int StudentID { get; set; }
    public int ExamTimeTableID { get; set; }
    public int ClassActivity { get; set; }
    public int IsPresent { get; set; }
    public int Assignment { get; set; }
    public int MidTerm { get; set; }
    public int Final { get; set; }
}

obj应该包含传递的对象,但它是null

有帮助吗?

javascript jquery ajax asp.net-mvc asp.net-core
1个回答
0
投票

这是因为在服务器端,您将ClassActivity /ClassActivity/Assignment/ ...声明为int类型,但是您的js将所有它们都发送为string。例如,发送到服务器的有效负载将类似于:

[{"StudentID":1,"ExamTimeTableID":1,"ClassActivity":"zz","Assignment":"aa","MidTerm":"333333333","Final":"3333z"},{"StudentID":1,"ExamTimeTableID":1,"ClassActivity":"","Assignment":"s","MidTerm":"ssssssssssss","Final":"sssssssssssss"},{"StudentID":1,"ExamTimeTableID":1,"ClassActivity":"ffffffff","Assignment":"","MidTerm":"ffffffffffffff","Final":"fffffffff"}]

发送前,请更改属性类型或将$(this).find("td:eq(7) input").val()转换为int / bool

© www.soinside.com 2019 - 2024. All rights reserved.