2017-04-24 6 views
0

オブジェクトと文字列配列をasp.netコントローラにシリアル化するにはどうすればいいですか? 私のサンプルアヤックスはこちら=>コントローラへのAjaxデータパラメータは常にNULLです

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、ソート順:SORTORDER})

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

としてそれを使用してください。' – Usman

+0

私はすでにも動作しませんthat.Itのようにしてみてください:( – Jze

+0

質問に – Usman

答えて

2

、コントローラのアクションが要求として受け付けDTOクラスを作成:

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

}, 
}); 

すると以下のようにDTOクラスは、ペイロードからのキーはプロパティ名と一致することを確認します。

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

これはパラメータがメソッド内またはモデル内で違いはありません。 OPの問題を解決する –

関連する問題