0

この質問を回答なしで参照してください: Kendo Grid does not update the grid with new created id after creation

新しいリンクを作成すると、メソッドがヒットし、ID が設定された完全なアイテムが返されます。

[HttpPost]
        public JsonResult Create(string LINK_TEXT, string HREF, string CATEGORY)
        {
            var link = new LinkDTO {LINK_TEXT = LINK_TEXT, HREF = HREF, CATEGORY = CATEGORY};
            var insertedLink = LinkService.Create(link);
            return Json(new[] {insertedLink}, JsonRequestBehavior.AllowGet);
        }

クライアントでは、応答は次のとおりです。

{"ID":86,"LINK_TEXT":"Test2","HREF":"http://www.google.com","CATEGORY":"Category1"}

IDのみを返すことも試みました:

{"ID":86}

剣道データを調べると:

CATEGORY: "Category1"
HREF: "http://www.google.com"
ID: 0
LINK_TEXT: "Test2"
_events: Object
dirty: false
id: 0
parent: function (){return r}
uid: "4739cc3d-a270-44dd-9c63-e9d378433d98"

ID は 0 です。このリンクを編集しようとすると、新しいものと見なされるため、create が再度呼び出され、リンクが複製されます。

これが私のグリッド定義です:

$(document).ready(function () {
        $("#link-results").kendoGrid({
            dataSource: {
                transport: {
                    create: {
                        url: '@Url.Action("Create", "Link")',
                        dataType: 'json',
                        type: 'POST'
                    },
                    read: {
                        url: '@Url.Action("Read", "Link")',
                        dataType: 'json',
                        type: 'GET',
                        data: {
                            CATEGORY: '@Model.CategoryName'
                        }
                    },
                    update: {
                        url: '@Url.Action("Update", "Link")',
                        dataType: 'json',
                        type: 'POST',
                        data: {
                            CATEGORY: '@Model.CategoryName'
                        }
                    },
                    destroy: {
                        url: '@Url.Action("Delete", "Link")',
                        dataType: 'json',
                        type: 'POST'
                    }
                },
                pageSize: 10,
                schema: {
                    data: "Links",
                    total: "ResultCount",
                    model: {
                        id: "ID",
                        fields: {
                            ID: {type: "number"},
                            LINK_TEXT: { type: "string", required: true },
                            HREF: { type: "string", defaultValue: "", validation: { required: true } },
                            CATEGORY: { type: "string", defaultValue: '@Model.CategoryName', editable: false }
                        }
                    }
                }
            },
            pageable: true,
            toolbar: ["create"],
            columns: [
                { field: "ID", hidden: true },
                { field: "LINK_TEXT", title: "Name", width: "40px"/*, template: "<a href='#=HREF#'>#=LINK_TEXT#</a>"*/ },
                { field: "HREF", title: "Link", width: "100px",filterable: false/*, template: "<a href='#=HREF#'>#=HREF#</a>"*/ },
                { field: "CATEGORY", title: "Category", width: "50px", filterable: false},
                {
                    command: [
                        { name: "edit", text: "" },
                        { name: "destroy", text: "" }
                    ],
                    title: "&nbsp;",
                    width: "70px"
                }
            ],
            editable: "inline",
            filterable: true,
            sortable: "true"
        });

これを機能させるためにパーツを追加しましたID: {type: "number"},が、で定義されているため、フィールド定義でこれを必要としないことに気付きましたid: "ID"

4

1 に答える 1

0

私は問題が何であるかを理解しました。これは、同じ問題に関して私が提供した別の回答のテキストです ( Kendo Grid does not update the grid with new created id after creation を参照):

私は同じ問題を抱えていて、答えを見つけたかもしれないと思います。結果を保持するオブジェクトをスキーマで定義する場合は、作成されたリンクの結果を同じオブジェクトで返す必要があります。例:

schema: {
         data: "data",        
         total: "total",  .... 
 }

MVC メソッドの例:

public JsonResult CreateNewRow(RowModel rowModel)
{
    // rowModel.id will be defaulted to 0

    // save row to server and get new id back
    var newId = SaveRowToServer(rowModel);

    // set new id to model
    rowModel.id = newId;

    return Json(new {data= new[] {rowModel}});
}
于 2013-11-15T17:50:44.677 に答える