使用 ajax 数据填充 kendo 多选

Populating a kendo multiselect with ajax data

我正在使用 kendo multiselect 小部件供用户通过 ajax 调用从数据库中提取 select 不同的值。 ajax 调用采用一个参数 searchValue,它将缩小返回数据的范围。这是我的控制器:

[HttpPost]
    public JsonResult ProfitabilitySearch(string searchValue)
    {
        return Json(InventoryDataAccess.ProfitabilitySearch(searchValue));
    }

1) 如何从文本框中获取值以用作搜索值?我在下面评论了相关区域。 这是我的数据源:

    var searchDataSource = new kendo.data.DataSource({
    transport: {
        read: function () {
            $.ajax({
                type: 'POST',
                url: Firm.ProfitabilitySearchURL,
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                         //'SuperClient' is test data to see if it works, but what do i
                         //need to make searchValue = what I type?
                data: JSON.stringify({ searchValue:  'SuperClient'}),
                success: function (data) {
                    return data.RESULT;
                }
            });
        }
    },
    group: { field: 'category' },
    serverFiltering: true
});

这里是我创建 multiselect 小部件的地方:

var TKSearch = $("#TKSearch").kendoMultiSelect({
        dataSource: searchDataSource, 
        autoBind: false,
        minLength: 3,
        placeholder: 'Search Timekeepers...',
        dataTextField: 'label',
        dataTextValue: 'value',
        delay: 200
    }).data("kendoMultiSelect");

我不确定这是否有帮助,但这是从 ajax 调用返回的 json 的结构:

{"label":"SUNFLOWER REALTY CORP. (023932)","value":"023932","category":"RC"}

解决上面的第一个问题可能会回答我的第二个问题,所以我会等到之后再问。

请求参数可以使用函数

var searchDataSource = new kendo.data.DataSource({
    transport: {
        read: function (options) {
            $.ajax({
                type: 'POST',
                url: Firm.ProfitabilitySearchURL,
                contentType: 'application/json; charset=utf-8',
                data: {
                    searchValue: function () {
                        // better: use a model property instead of this
                        return $("#TKSearch").data('kendoMaskedTextBox').value();
                    }
                },
                success: function (data) {
                    options.success(data.RESULT);
                }
            });
        }
    },
    group: { field: 'category' },
    serverFiltering: true
});

备注

  • 这个真的应该是一个GET请求。 POST 用于实际更改服务器上数据的请求,GET 用于仅从服务器检索数据的请求。
  • 您不必 JSON.stringify() 自己。 jQuery 透明地做到这一点。
  • 指定 dataType 完全多余,jQuery 将从响应 headers.
  • 中计算出来
  • 通过 jQuery 读取输入值不干净。请改用 data-bound 模型 属性。
  • 回调调用(options.success()
  • 此示例缺少 HTTP 错误处理,您必须添加它。