MVC - 如何建模使用这种不寻常的后期数据格式列出对象列表?

时间:2013-09-17 15:22:34

标签: asp.net-mvc asp.net-mvc-4 kendo-ui kendo-asp.net-mvc

通常,当您使用MVC对ModelBind进行对象列表时,操作如下所示:

    public ActionResult Hello(List<DocumentViewModel> viewModels)
    {

Post数据看起来像:

[0].Id 1
[0].Name Bob
[1].Id 2
[1].Name Jane

但是,我怎样才能使以下帖子数据起作用?

0[Id] 1
0[Name] Bob
1[Id] 2
1[Name] Jane

Post数据由Kendo UI提供,所以我认为我没有太大的灵活性来改变它。

更新感谢Petur的回答。为了扩展他的答案,这个功能:

common.MvcSerializeArray = function (array, prefix) {
    var result = {};

    if (!prefix) {
        prefix = '';
    }

    if (array) {
        for (var i = 0; i < array.length; i++) {
            if ($.isPlainObject(array[i])) {
                for (var property in array[i]) {
                    result[prefix + "[" + i + "]." + property] = array[i][property];
                }
            } else {
                result[prefix + "[" + i + "]"] = array[i];
            }
        }
    }

    return result;
};

应该在返回Kendo的Data方法之前包装数组:

    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read
            .Action("PickerDocuments", "DocumentRepository")
            .Data(@<text>function(e) { return MyApp.Common.MvcSerializeArray(@Html.Raw(Json.Encode(Model))); }</text>)))

瞧,我轻松获得了MVC ModelBinds的数据:

[0].Id 1
[0].Name Bob
[1].Id 2
[1].Name Jane

1 个答案:

答案 0 :(得分:1)

您无法更改它,但您可以通过为Ajax网格发送解释here等附加参数来添加所需的格式。在this代码库中使用了相同的方法(您可以在代码中获取魔术函数,它用于发送多选值)