Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将剑道网格数据源请求从javascript传递到ASP.NET_Javascript_Asp.net Mvc_Angularjs_Kendo Ui_Datasource - Fatal编程技术网

将剑道网格数据源请求从javascript传递到ASP.NET

将剑道网格数据源请求从javascript传递到ASP.NET,javascript,asp.net-mvc,angularjs,kendo-ui,datasource,Javascript,Asp.net Mvc,Angularjs,Kendo Ui,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

如果我将数据源传输声明为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'}
         }
      }
   }
};
现在的问题是,我想使用函数模式读取(是软件设计要求) 但用于向服务器传递请求参数的sintax与使用传输类型“aspnetmvc ajax”不同。 如果我将传输类型设置为“aspnetmvc ajax”,则不会触发读取函数, 但如果不设置传输类型“aspnetmvc ajax”,则请求参数在服务器端传递不好

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

传输类型为“aspnetmvc ajax”:

没有传输类型“aspnetmvc ajax”:

排序和筛选值参数与“aspnetmvc ajax”版本不同,服务器端为空

作为解决方法,我手动解析parameterMap中的请求参数,如下图所示, 将排序和筛选值转换为符合“aspnetmvc ajax”版本和服务器端要求的tax是可以顺利通过的

  • 有最好的解决办法吗
  • 为什么如果使用“aspnetmvc ajax”传输类型,则不会调用read函数
  • 如果使用read函数的唯一解决方案是避免使用“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;
      }
   }
};

以防其他人像我今天一样偶然发现这篇文章

对我来说,答案就是那句台词

var data = kendo.data.transports["aspnetmvc-ajax"].prototype.options.parameterMap.call(this, optionsData.data, "read", false);
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)
{

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