【问题标题】:Passing A List Of Objects Into An ActionResult MVC Controller Method Using jQuery Ajax使用 jQuery Ajax 将对象列表传递给 ActionResult MVC 控制器方法
【发布时间】:2014-11-28 04:10:00
【问题描述】:

可能重复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' 时,我在List<MYMODEL> 中得到null

为什么有什么不对?

【问题讨论】:

  • JsonResultActionResult 两种类型的控制器方法中对我来说都很好。显示两个控制器方法?

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


【解决方案1】:

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

data: {"things" : things},

你的控制器应该像

public IActionResult ActionName(List<Model> things)

【讨论】:

  • 错了!您不能将对象数组绑定到 List&lt;T&gt;,除非它的 stringified(并且 IActionResult 是 core-mvc,而不是 mvc)
【解决方案2】:

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

public ActionResult CheckMethod(List<MYMODEL> items)

那么应该是

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

不是

data: JSON.stringify(things),

【讨论】:

    【解决方案3】:

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

    如果您的操作只返回JSON 数据,请坚持使用JsonResult;它使您的操作更不容易出错,因为如果您不小心尝试返回另一种类型的结果,Visual Studio 会通知您。当您的操作返回一种以上类型的结果时,请使用 ActionResult

    话虽如此,Stephen Muecke 的观察是正确的;假设您的操作期待List&lt;MYMODEL&gt;,您正在“字符串化”您的对象,但没有将它们分配给变量。确保您在AJAX 函数中声明的变量名称与您的ActionResult(或JsonResult)期望的参数名称相同。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2023-01-28
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多