0

ここで見られるものに非常に近い機能を複製しています。 https://onabai.wordpress.com/2013/07/17/kendoui-multiselect-in-a-grid-yes-we-can/

インラインの複数選択エディター フィールドを持つ剣道グリッドがあります。その複数選択の変更時に開始された datasource.sync() イベントがあります。私が抱えている問題は、ポスト変数でデータがどのように配置されるかです。

FireFox で FireBug を使用しています。sync() イベントで、このように複数選択フィールドの値を表示する関数を設定できます。

console.log(this.value());

これは、私が「RoleCode」と呼んだ文字列配列フィールド用です。とにかく、コンソールログには値が表示されます。たとえば、

A, OU

しかし、コントローラーへの Post 呼び出しとパラメーターを見ると、RoleCode フィールドが重複していることがわかります。これが、コントローラーがメソッド シグネチャを認識しない理由です。たとえば、これは FireBug で見られるものです...

ID  123
Field1  TextFromField1
RoleCode[1][RoleCode]  OU
RoleCode[]  A

投稿パラメーターが使用できるように、これをどのように設定すればよいでしょうか?

アップデート

今のところ、更新関数を変更して、複数選択値をコンマ区切りの文字列として送信するだけです。コントローラーでそれらを処理できます。私はこの設定があまり好きではありませんが、投稿された値を正しく送信する方法を見つけるまでは、これを使用します。

    update: {
            url: "Home/GridUpdate",
            type: "POST",
            dataType: "json",
            data: function () {
                //Grid does not post multiselect array correctly, need to convert to a string
                var rolesString = $("#gridRoleList").data("kendoMultiSelect").value().toString();
                return { rolesString: rolesString };
            },
            complete: function (e) {
                setTimeout(function () {
                    refreshGrid();
                }, 300);
            },
            success: function (result) {
                // notify the data source that the request succeeded
                options.success(result);
            },
            error: function (result) {
                // notify the data source that the request failed
                options.error(result);
            }
        },

更新 2

実際には、グリッド内の別のフィールドを編集すると、複数選択が見つからないために js エラーが発生するため、これは良い考えではありません。

4

2 に答える 2

0

これが私がそれを解決した方法です。エディタ機能の変更イベントで、モデルの値をマルチセレクトの値で更新しました。次に、データはこのような文字列配列として正しく送信されます。

ID  123
Field1  TextFromField1
RoleCode[]  A
RoleCode[]  OU

私のグリッドエディタ機能

function roleMultiSelectEditor(container, options) {
    $('<input id = "gridRoleList" name="' + options.field + '"/>')
        .appendTo(container)
        .kendoMultiSelect({
            dataTextField: "RoleCode",
            dataValueField: "RoleCode",
            autoBind: true,    
            change: function (e) {
                //Applies the value of the multiselect to the model.RoleCode field
                //Necessary to correctly post values to controller
                options.model.RoleCode = this.value();
                processGridMultiSelectChange();
            },
            dataSource: {
                type: "json",
                transport: {
                    read: {
                        dataType: "json",
                        url: baseUrl + "api/DropDownData/RoleList",
                    },
                }
            },
            dataBound: function (e) {
            }
        });
}
于 2016-08-19T18:21:51.960 に答える