0

所以在我看来我有这个

<div id="grid"></div>


<script>
    $(document).ready(function () {
        dataSource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: '@Url.Action("GetCityList", "City")',
                    dataType: "json",
                    type: "GET",
                    contentType: "application/json; charset=utf-8"
                },
                create: {
                url: '@Url.Action("create", "City")',
                type: "Post"
            },
                parameterMap: function (data, operation) {
                    if (operation != "read") {
                        var result = {};

                        for (var i = 0; i < data.models.length; i++) {
                            var ciudad = data.models[i];

                            for (var member in ciudad) {
                                result["ciudades[" + i + "]." + member] =                        ciudad[member];
                            }
                        }
                        return result;
                    }
                }


            },
            batch: true,
            pageSize: 30,
            schema: {
                model: {
                    id: "id",
                    fields: {
                        id: { editable: false, nullable: true },
                        descripcion: { validation: { required: true} },
                        DepartamentName: { field: "DepartamentName" },
                    }
                }
            }
        });

        $("#grid").kendoGrid({
            dataSource: dataSource,
            navigatable: true,
            pageable: true,
            height: 400,
            toolbar: ["create", "save", "cancel"],
            columns: [
                "descripcion",
            { field: "DepartamentName", title: "Name Departament", editor: categoryDropDownEditor, width: 150 }, 
                { command: "destroy", title: "&nbsp;", width: 110}],
            editable: true
        });
    });

</script>

<script>

    function categoryDropDownEditor(container, options) {

        $('<input data-text-field="name" data-value-field="name"  data-bind="value:' + options.field + '"/>')
                        .appendTo(container)
                        .kendoDropDownList({
                            autoBind: false,
                            dataSource: {
                                type: "json",
                                transport: {
                                    read: {
                                        url: '@Url.Action("GetDepartament", "city")
                                            }
                                }
                            }
                        });
    }
            </script>

它告诉我没问题,但我的问题是,当它击中我的操作时,它会给我部门的名称而不是 id

当我改变我的功能这部分到这个

 $('<input data-text-field="name" data-value-field="name"  data-bind="value:' + options.field + '"/>')

 $('<input data-text-field="name" data-value-field="id"  data-bind="value:' + options.field + '"/>')

有了它,我的动作很好,我得到了 id,但是在我的网格中,当我在下拉列表中选择网格中的一个部门时,它显示了我的 id(所以不是我想要的行为)

我该怎么做才能让它发挥作用?我猜它在绑定部分..

4

1 回答 1

1

前段时间我遇到了同样的问题。我的解决方案有点棘手。这个想法是使用“id|name”格式。我为该字段设置模板:

template: '#= (fldName).substring((fldName).indexOf("|", 0) + 1) #';

我设置了编辑器:

function(container, options) {
        $('<input id="autoComplete" data-bind="value:' + options.field + '"/>')
            .appendTo(container)                                    
            .kendoComboBox({
                dataTextField: "name",
                dataValueField: "id",
                minLength: 1,
                template: '#= (id).substring((id).indexOf("|", 0) + 1) #',
                filter: "contains",
                delay: 0,
                dataSource: new kendo.data.DataSource({
                    type: "json",
                    transport: {
                        read: {
                            url: "services/SearchContent",
                            type: "GET"
                        },
                        parameterMap: function (opt, operation) {
                            var val;
                            if(opt.filter) {
                                val = opt.filter.filters[0].value;
                            } else {                                                        
                                val = options.model[$("#autoComplete").data("bind").substring(6)];
                                val = (val).substring((val).indexOf("|", 0) + 1);
                            }
                            if(val == "") val = "a";
                            return {
                                searchString: val,
                                resultsCount: 10,
                                date: (new Date()).valueOf()
                            };
                        }
                    },
                    schema: {
                        data: "results",
                        type: "json"
                    },
                    serverFiltering: true
                })
            });

我的服务还通过用户输入动态过滤结果,但我认为您可以理解我的想法。当然,为了完成这项工作,您的网格服务外壳会为此列返回“id|name”格式,而不仅仅是“name”。

于 2012-09-11T09:46:54.383 回答