【问题标题】:Ajax data parameter to controller is always null控制器的 Ajax 数据参数始终为空
【发布时间】:2017-04-24 10:54:27
【问题描述】:

如何将序列化对象和字符串数组发送到 asp.net 控制器? 我的示例 ajax 在这里=>

var $this = $("#FormName");
var frmValues = $this.serialize();
var sortorder = [];
$(".StepOrder").each(function (index) {
   sortorder.splice(index, 0, ($(this).attr('id')));
});                           

$.ajax({
  type: 'POST',
  traditional:true,
  url: '/MyController/MyAction',
  datatype:'html',
  contentType: 'application/json; charset=utf-8',
  data:JSON.stringify( { frmValues: frmValues, sortorder: sortorder }),
  success: function (data) {

  },
});

我的控制器=>

[HttpPost]
public ActionResult MyAction(MyModel frmValues,List<string> sortorder)
{
 return View();
}

控制器中的 MyModel 和 sortorder 始终为空。我也尝试喜欢=>

$.ajax({
 type: 'POST',
 url: '/MyController/MyAction',
 data: { frmValues: frmValues, sortorder: sortorder },
 success: function (data) {

 },
});

它也不起作用。我不知道为什么它不起作用。

【问题讨论】:

  • 试试JSON.stringify({ frmValues: frmValues, sortorder: sortorder })
  • 我已经这样尝试了。它也不起作用。:(
  • 能否在问题中添加view和MyModel
  • 并在浏览器中查看网络选项卡以检查请求参数
  • 将数据类型更改为 json

标签: jquery asp.net json ajax asp.net-mvc


【解决方案1】:

使用这种方法,创建一个控制器操作作为请求接受的 DTO 类:

$.ajax({
 type: 'POST',
 url: '/MyController/MyAction',
 data: { frmValues: frmValues, sortorder: sortorder },
 success: function (data) {

 },
});

然后DTO类如下,确保来自payload的键与属性名称匹配。

public class ExampleDTO 
{
   public MyModel frmValues {get; set;}
   public List<string> sortorder {get; set;}
}

将其用作:

[HttpPost]
public ActionResult MyAction(ExampleDTO req)
{
  //var frmValues = req.frmValues;
  //string sortOrder = req.sortorder;
  return View();
}

【讨论】:

  • 参数在方法或模型中没有区别。这无助于解决 OP 的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多