gpt4 book ai didi

javascript - 将 kendo grid DataSourceRequest 从 javascript 传递到 ASP.NET

转载 作者:行者123 更新时间:2023-11-28 07:49:43 26 4
gpt4 key购买 nike

如果我声明 dataSource 传输读取为 url,则我使用 kendo ui grid(用于 asp.net mvc)没有问题:

var dataSource = {
pageSize: 20,
batch: true,
serverOperation: true,
serverPaging: true,
serverSorting: true,
serverFiltering: true,
type: "aspnetmvc-ajax",
transport:
{
read:
{
url: '/Home/GetNodes',
type: "POST",
dataType: "json",
data: function ()
{
return {'p1': 'some text', 'p2': 'other'}
}
}
}
};

现在的问题是我想使用功能模式读取(是软件设计要求)但用于将请求参数传递到服务器的语法与使用传输类型“aspnetmvc-ajax”或不同。如果我设置传输类型“aspnetmvc-ajax”,则不会触发读取功能,但如果没有设置传输类型“aspnetmvc-ajax”,则请求参数在服务器端无法很好地传递!

如果我查看通过http发送的post参数:

传输类型为“aspnetmvc-ajax”:

page:1
pageSize:20
sort:Field1-asc
filter:Field1~eq~'value1'

没有传输类型“aspnetmvc-ajax”:

page:1
pageSize:20
sort:[{field:Field1, dir:asc}]
filter:{filters:[{operator:eq, value:value1, field:Field1}], logic:and}

排序和过滤值参数与“aspnetmvc-ajax”版本不同,服务器端为空!

作为解决方法,我手动解析parameterMap中的请求参数,如底部所示,翻译排序和过滤值语法符合“aspnetmvc-ajax”版本和服务器端都很好地通过了。

  • 有最好的解决方案吗?
  • 为什么如果我使用“aspnetmvc-ajax”传输类型,则不会调用读取函数?
  • 如果使用读取功能的唯一解决方案是避免使用“aspnetmvc-ajax”传输类型,有一种标准方法可以在 DataSourceRequest 对象中格式化请求参数以供服务器端使用吗?

谢谢

实际上我的解决方法是:

var dataSource = {
pageSize: 20,
batch: true,
serverOperation: true,
serverPaging: true,
serverSorting: true,
serverFiltering: true,
transport:
{
read: function (options)
{
var request = $scope.grdDocuments.dataSource.transport.parameterMap({
filter: $scope.grdDocuments.dataSource.filter(),
group: $scope.grdDocuments.dataSource.group(),
sort: $scope.grdDocuments.dataSource.sort(),
page: $scope.grdDocuments.dataSource.page(),
pageSize: $scope.grdDocuments.dataSource.pageSize()
});

httpService.GetNodes(request.filter, request.group, request.sort, request.page, request.pageSize, sFolderId, ... other parameters)
.then(
function (args)
{
//Verifica esito della richiesta http
if (!sharedService.CheckHttpRequestResult(args, 'GetNodes'))
{
options.error(null);
return;
}

options.success(args.data);
}
);
},
parameterMap: function (data, operation)
{
//Trasformazione parametro filter
if (typeof data.filter !== 'undefined')
{
//normale: {filters:[{operator:eq, value:a, field:Affidatario}], logic:and}
//trasformato: Affidatario~eq~'a'
var filter = '';
for (var i = 0; i < data.filter.filters.length; i++)
{
if (filter !== '')
filter += '~' + data.filter.logic + '~';

var fieldValue = "'" + data.filter.filters[i].value + "'";

//Formattazione valore in base al formato della colonna
var found = model.fields[data.filter.filters[i].field];
if (typeof found !== 'undefined')
{
if (found.type === 'number')
fieldValue = data.filter.filters[i].value;
else if (found.type === 'date')
fieldValue = "datetime'" + data.filter.filters[i].value.format('Y-m-d') + "T00-00-00'";
}

filter += data.filter.filters[i].field + '~' + data.filter.filters[i].operator + '~' + fieldValue;
}
data.filter = filter;
}

//Trasformazione parametro sort
if (typeof data.sort !== 'undefined')
{
//normale: [{field:Anno, dir:asc}]
//trasformato: Anno-asc
var sort = '';
for (var i = 0; i < data.sort.length; i++)
{
if (sort !== '')
sort += '~';

sort += data.sort[i].field + '-' + data.sort[i].dir;
}
data.sort = sort;
}

var result = JSON.parse(JSON.stringify(data));
return result;
}
}
};

服务器端:

public JsonResult GetNodes([DataSourceRequest]DataSourceRequest request, string sFolderId, ... other parameters)
{

}

最佳答案

以防万一其他人像我今天一样偶然发现这篇文章。 This might help you

对我来说,答案就是线条

var data = kendo.data.transports["aspnetmvc-ajax"].prototype.options.parameterMap.call(this, optionsData.data, "read", false);

关于javascript - 将 kendo grid DataSourceRequest 从 javascript 传递到 ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26991475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com