2017-04-24 70 views
0

如何将串行化对象和字符串数组发送到asp.net控制器? 我的样本AJAX是这里=>控制器的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和排序顺序在控制器总是null.I也尝试像=>

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

}, 
}); 

它还不工作,我不知道为什么它不起作用。

+0

尝试'JSON.stringify({frmValues:frmValues,排序顺序:排序顺序})' – Usman

+0

我已经尝试像that.It也没有工作:( – Jze

+0

您可以在问题 – Usman

回答

2

使用这种方法,创建了控制器动作作为接受请求的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(); 
} 
+0

它没有区别它参数在方法或模型中。解决OP的问题 –