C# 使用jQuery Ajax将对象列表传递到ActionResult MVC控制器方法

C# 使用jQuery Ajax将对象列表传递到ActionResult MVC控制器方法,c#,jquery,ajax,asp.net-mvc,asp.net-mvc-4,C#,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 4,可能重复 但我的问题是我什么时候通过 var things = [ {employee:'test',effectiveDate:'',expirationDate:'' }, { employee:'test',effectiveDate:'',expirationDate:'' } ]; $.ajax({ contentType: 'application/json', type: "POST", url: "/MyController/CheckMethod", data

可能重复

但我的问题是我什么时候通过

var things = [
  {employee:'test',effectiveDate:'',expirationDate:'' },
  { employee:'test',effectiveDate:'',expirationDate:'' }
];

$.ajax({
 contentType: 'application/json',
 type: "POST",
 url: "/MyController/CheckMethod",
 dataType: "json",
 data: JSON.stringify(things),
 async: false,
 success: function (data) {
对于一个控制器方法,它是一个
[HTTPPOPST]JsonResult
,然后我将
放入我的
列表中

但是当我将一个控制器方法作为
'ActionResult'
时,我在
列表中得到
null


为什么会有什么不对劲

ajax函数中有一个错误。假设您的控制器方法是

public ActionResult CheckMethod(List<MYMODEL> items)
不是


它应该适用于这两种场景,因为
JsonResult
只是
ActionResult
的一种类型(有关更多信息,请参阅)

如果您的操作只返回
JSON
数据,请坚持使用
JsonResult
;它使您的操作不那么容易出错,因为如果您不小心尝试返回另一种类型的结果,VisualStudio会让您知道。当您的操作返回多种类型的结果时,请使用
ActionResult


尽管如此,斯蒂芬·穆克的观察是正确的;假设您的操作需要一个
列表
,则您正在“串化”对象,但没有将它们分配给变量。确保在
AJAX
函数中声明的变量名与
ActionResult
(或
JsonResult
)所需的参数名相同。

我认为首先,JSON应该是强类型的。 一旦它已经强类型化,您就不需要使用JSON.stringfy。 相反,你应该

data: {"things" : things},
你的控制器应该是

public IActionResult ActionName(List<Model> things)
public IActionResult ActionName(列出事物)

在这两种类型的控制器方法
JsonResult
ActionResult
中对我都适用。向我展示两种控制器方法?错!不能将对象数组绑定到
列表
,除非其
字符串化
(且
IActionResult
是核心mvc,而不是mvc)
data: {"things" : things},
public IActionResult ActionName(List<Model> things)