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

时间:2014-11-28 04:10:01

标签: c# jquery ajax asp.net-mvc asp.net-mvc-4

可能重复Passing A List Of Objects Into An MVC Controller Method Using jQuery Ajax

但我的问题是当我通过时

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的控制器方法,然后我value进入List<MYMODEL>

但当我将控制器方法设为'ActionResult'时,我在null

中获得了List<MYMODEL>

为什么这么错呢?

3 个答案:

答案 0 :(得分:4)

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

data: {"things" : things},

你的控制器应该像

public IActionResult ActionName(List<Model> things)

答案 1 :(得分:3)

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

public ActionResult CheckMethod(List<MYMODEL> items)

那应该是

data: JSON.stringify('items': things),

data: JSON.stringify(things),

答案 2 :(得分:2)

它应该适用于两种情况,因为JsonResult只是ActionResult的一种类型(有关详细信息,请参阅here)。

如果您的操作仅返回JSON数据,请坚持使用JsonResult;它使您的操作不易出错,因为如果您不小心尝试返回其他类型的结果,Visual Studio会通知您。当您的操作返回多种类型的结果时,请使用ActionResult

话虽如此,斯蒂芬·穆克的观察是正确的;假设您的操作期望List<MYMODEL>,那么您可以&#34;字符串化&#34;你的对象,但没有将它们分配给变量。确保您在AJAX函数中声明的变量名与ActionResult(或JsonResult)期望的参数具有相同的名称。