如何将序列化对象和字符串数组都发送到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。我也尝试like =>

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

 },
});


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

最佳答案

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

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

 },
});


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

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

关于jquery - Controller 的Ajax数据参数始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43586217/

10-09 22:24