使用ajax数据

时间:2016-04-04 14:48:33

标签: ajax kendo-ui kendo-multiselect

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

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

1)如何从文本框中获取值作为searchValue?我评论了下面的问题。 这是我的dataSource:

    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
});

这是我创建多选小部件的地方:

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"}

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

1 个答案:

答案 0 :(得分:0)

您可以将函数用于请求参数。

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会从响应标头中解决这个问题。
  • 通过jQuery读取输入值并不干净。请改用数据绑定模型属性。
  • 回调调用(options.success()
  • 此示例缺少HTTP错误处理,您必须添加它。