无法将具有数组属性的对象传递给MVC控制器方法

时间:2014-04-12 05:19:47

标签: jquery asp.net-mvc model-binding

我有以下控制器方法签名:

public void DiscoveryMailboxAnnotate(string note, List<string> ids)

我正在尝试将以下javascript对象发布到此方法:

  var data = {
                note: 'note',
                ids: ['1','2']
            };
 $.ajax({
                    type: "POST",
                    url: '/Supervise/DiscoveryMailboxAnnotate',
                    data: data,
                    error: function (xhr, status, error) {
                    },
                    success: function (response) {

                    }
                });

我的控制器方法中的注意参数已填充,但 List<string> id 参数未填充。我做错了什么?

1 个答案:

答案 0 :(得分:1)

认为你有一个模型绑定问题,尝试更改为 List<int> 你的方法签名,并认为你会发现它有用。

编辑: 但这是一个模型招标问题。默认情况下,属性是私有的,因此请更改您的视图模型,使其公开:

        public class DiscoveryMailboxAnnotateViewModel
    {
        public string Note { get; set; }
        public List<string> Ids { get; set; }
    }

然后修复你的控制器:

    [HttpPost]
    public void DiscoveryMailboxAnnotate(DiscoveryMailboxAnnotateViewModel model) 
    {
        if (!ModelState.IsValid)
        { 
        }   
    }

然后是JQuery

<script>
var model = {
    Note: 'note',
    Ids: ['11', '20', '30']
};
$.ajax({
    type: "POST",
    url: '/Home/DiscoveryMailboxAnnotate',
    data: JSON.stringify(model),
    dataType: 'json',
    contentType: 'application/json',
    error: function (xhr, status, error) {
    },
    success: function (response) {

    }
});

本文将解释更多,绑定一个List并没有完全按照我的预期工作:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/