控制器的Ajax数据参数始终为null

时间:2017-04-24 10:54:28

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

如何将序列化对象和字符串数组发送到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始终为null。我也尝试使用=&gt;

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

 },
});

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

1 个答案:

答案 0 :(得分:3)

使用此方法,创建控制器操作接受的DTO类:

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

 },
});

然后如下DTO Class,确保有效负载中的密钥与属性名称匹配。

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();
}