3

jquery ajax postを介してjsonデータをコントローラーアクションに送信しています。私のアクションの IEnumerable は常に null です。

json が間違っていますか、それともモデル バインダーが json を IEnumerable に変換しないのはなぜですか?

public ActionResult Update(IEnumerable<Teststep> teststeps)
{
   //
}

$.ajax({
            url: '@Url.Action("Update", "Teststep")',
            type: 'POST',
            data: [{ "errortext": "oh something bad happended.", "unitid": "10" }, { "errortext": "you got it man.", "unitid": "20"}],
            success: function (response) {
                debugger;
                if (response.success) {
                    dlg.dialog("close");
                    // Update UI

                }
                else {
                    // Reload the dialog with the form to show model/validation errors 
                    dlg.html(response);
                }
            }
        });

public class Teststep
{

 [HiddenInput(DisplayValue = false)]
 public int UnitId { get; set; }    

 public string ErrorText { get; set; }  

 // some other props removed for readability   

}
4

2 に答える 2

1

コレクション (配列、ienumerables など) が modelbinder を介してアクション メソッドに正しく渡されるようにするために、私は常に ajax 呼び出しで traditional: true オプションを設定する必要がありました。

$.ajax({
    url: '@Url.Action("Update", "Teststep")',
    type: 'POST',
    traditional: true,
    ...
于 2012-06-05T16:26:05.590 に答える
1

今それは動作します!IEnumerable で 1 アイテムを取得します。問題はめちゃくちゃなjsonでした;-)

 var data = { teststeps: [{ ErrorText: 'bla', UnitId: 10}] };
        $.ajax({
            url: '@Url.Action("Update", "Teststep")',
            type: 'POST',
            data: JSON.stringify(data),
            dataType: 'json',
            contentType: 'application/json'            
        });

[HttpPost]
public ActionResult Update(IEnumerable<Teststep> teststeps)
{

}
于 2012-06-05T16:43:05.943 に答える