在Kendo数据网格

时间:2015-06-09 01:55:18

标签: javascript jquery kendo-ui kendo-grid kendo-datasource

我有一个Kendo Grid,通过调用服务器端ASP.NET读取方法,通过ajax加载数据:

 public virtual JsonResult Read(DataSourceRequest request, string anotherParam)

在我的客户端JS中,我在单击按钮时触发读取:

grid.dataSource.read( { anotherParam: 'foo' });
grid.refresh();

这可以正常工作,只有当我浏览网格中的结果页面时,我才会丢失额外的参数,或者使用网格上的刷新图标重新加载数据。

如何在网格中保留其他参数数据?

我尝试过设置

grid.dataSource.data

直接,但没有太多运气。如果我传递一个对象,我会得到一个错误,如果我传递一个返回数据的JS函数的名称,则无效。

4 个答案:

答案 0 :(得分:3)

如果要将其他参数传递给Read ajax数据源方法(服务器端),可以使用

.DataSource(dataSource => dataSource
            ...
            .Read(read => read.Action("Read", controllerName, new { anotherParam= "foo"}))
            ...
        )

如果要通过客户端脚本传递其他参数,可以使用datasource.transport.parameterMap,如下所示

parameterMap: function(data, type) {
  if (type == "read") {

     return { request:kendo.stringify(data), anotherParam:"foo" }
  }

答案 1 :(得分:2)

使用datasource.transport.parameterMap

parameterMap: function(data, type) {
  if (type == "read") {

     return kendo.stringify(data, anotherParam);
  }

我不确定你的其他参数来自哪里,但这通常是我向服务器发送额外参数的方式。

http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-transport.parameterMap

答案 2 :(得分:0)

如果使用datasource对象:

var dataSource = new kendo.data.DataSource({
            transport: {
                    read: {
                        url: '/Api/GetData',
                        contentType: "application/json; charset=utf-8", // optional
                        dataType: "json",
                        data: function () {
                            return {
                                additionalParam: value
                            };
                        }
                    },
                //parameterMap: function (data, type) {
                // and so use this property to send additional param
                //    return $.extend({ "additionalParam": value }, data);
                //}
                    },
            schema: {
                type: "json",
                data: function (data) {
                    return data.result;
            },
            },
            pageSize: 5,
            serverPaging: true,
            serverSorting: true
        });

并在网格中设置选项:

$("#grid").kendoGrid({
    autoBind: false,
    dataSource: dataSource,
    selectable: "multiple cell",
    allowCopy: true,
    columns: [
        { field: "productName" },
        { field: "category" }
    ]
});

并在点击事件中显示此代码:

dataSource.read();

并在api web方法中执行此操作:

[HttpGet]
public HttpResponseMessage GetData([FromUri]KendoGridParams/* define class to get parameter from javascript*/ _param)
        {
           // use _param to filtering, paging and other actions
            try
            {

                var result = Service.AllCustomers();
                return Request.CreateResponse(HttpStatusCode.OK, new { result = result });
            }
            catch (Exception ex)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest, new { result = string.Empty });
            }
        }
祝你好运。

答案 3 :(得分:0)

要通过分页保留附加参数的更新值,您需要创建一个全局变量并将值保存到它。

var anotherParamValue= "";//declare a global variable at the top. Can be assigned some default value as well instead of blank

然后,当您触发datasource read事件时,应将值保存到我们之前创建的全局变量

anotherParamValue = 'foo';//save the new value to the global variable
grid.dataSource.read( { anotherParam: anotherParamValue });
grid.refresh();

现在,这很重要。在您的datasource对象中transport.read.data必须设置为使用如下所示的函数:

var dataSource = new kendo.data.DataSource({
            transport: {
                    read: {
                        url: '/Api/GetData',
                        contentType: "application/json; charset=utf-8", // optional
                        dataType: "json",
                        //Must be set to use a function, to pass dynamic values of the parameter
                        data: function () {
                            return {
                                additionalParam: anotherParamValue //get the value from the global variable
                            };
                        }
                    },

                    },
            schema: {
                type: "json",
                data: function (data) {
                    return data.result;
            },
            },
            pageSize: 5,
            serverPaging: true,
            serverSorting: true
        });

现在,在每个页面按钮上单击,您应该获得anotherParam的更新值,该值当前设置为foo