字符串化后的对象数组未传递给控制器操作,并且操作参数(模型)为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
。
有帮助吗?
这是因为在服务器端,您将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
。