3

通常、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

投稿データは 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
4

1 に答える 1