3

我通过 jquery ajax post 将 json 数据发送到我的控制器操作。我操作中的 IEnumerable 始终为空。

我的 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

现在它起作用了!我在 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 回答
1

为了让集合(数组、ienumerables 等)正确地通过 modelbinder 传递给 action 方法,我一直不得不在 ajax 调用上设置 traditional: true 选项:

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