我有一个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函数的名称,则无效。
答案 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