将 Datatables POST 数组转换为 C# 模型

     2023-05-07     204

关键词:

【中文标题】将 Datatables POST 数组转换为 C# 模型【英文标题】:Convert Datatables POST array to C# Model 【发布时间】:2015-04-19 03:53:09 【问题描述】:

我正在使用 datatables.net 结构向 asp mvc 发送数据,如下所示

draw:1
columns[0][data]:first_name
columns[0][name]:
columns[0][searchable]:true
columns[0][orderable]:true
columns[0][search][value]:
columns[0][search][regex]:false
columns[1][data]:last_name
columns[1][name]:
columns[1][searchable]:true
columns[1][orderable]:true
columns[1][search][value]:
columns[1][search][regex]:false
order[0][column]:0
order[0][dir]:asc
start:0
length:10
search[value]:
search[regex]:false

如何选择/绑定这些数据到作为 Action 方法参数的 c# 类,实际上是开始、长度、绘制地图,但是 列[n][nnn] 给空

我的 C# 模型类是 公共类数据表模型

    public string draw  get; set; 
    public ICollection<Columns> columns  get; set; 
    //public string[] order  get; set; 
    public int start  get; set; 
    public int length  get; set; 
    public List<Order> order  get; set; 
    public int recordsTotal  get; set; 
    public int recordsFilter  get; set; 

    public DataTableModel()
    
        columns = new List<Columns>();
        order = new List<Order>();
    


public class Columns

    public string data  get; set; 
    public string name  get; set; 
    public string searchable  get; set; 
    public string orderable  get; set; 
    public List<Search> search  get; set; 


public class Search

    public bool regex  get; set; 
    public string value  get; set; 


public class Order

    public string column  get; set; 
    public string dir  get; set; 

谢谢

【问题讨论】:

发送到服务器的所有信息都需要从请求中获取,例如var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);. 看看Firebug 中的Net 面板,看看发送的是什么。更多详情here 【参考方案1】:

不,这不是我使用不发布 iSortCol_n 的最新版本的情况。答案是我没有包含 'contentType': "application/json"。这就是我在 mvc 操作参数中选择空列列表的原因。一旦我放置它 mvc 映射所有字段。

 var table =   $('#example').dataTable(
        "processing": true,
        "serverSide": true,
        'ajax': 
            'type': 'POST',
            'contentType': "application/json",
            'url': '/TestDistributor/GetAllForGrid',
            'data': function (d) 
                console.log(JSON.stringify(d));
                return JSON.stringify(d);
            
        ,
        "columns": [
         'data': 'DistributorCode' ,
         'data': 'DistributorName' ,
         'data': 'AreaCode' ,
         'data': 'TownCode' ,
         'data': 'CityCode' ,
        ]
    );

【讨论】:

【参考方案2】:

这里是课程

public class JQDTParams
    
        public int draw  get; set; 

        public int start  get; set; 
        public int length  get; set; 


        public JQDTColumnSearch  /*Dictionary<string, string>*/ search  get; set; 
        public List<JQDTColumnOrder/*Dictionary<string, string>*/> order  get; set; 
        public List<JQDTColumn/*Dictionary<string, string>*/> columns  get; set; 

    


    public enum JQDTColumnOrderDirection
    
        asc, desc
    

    public class JQDTColumnOrder
    
        public int column  get; set; 
        public JQDTColumnOrderDirection dir  get; set; 
    
    public class JQDTColumnSearch
    
        public string value  get; set; 
        public string regex  get; set; 
    

    public class JQDTColumn
    
        public string data  get; set; 
        public string name  get; set; 
        public Boolean searchable  get; set; 
        public Boolean orderable  get; set; 
        public JQDTColumnSearch search  get; set; 
    

及用法

HTML

<div>

    <table id="aractipiListesi" class="display" cellspacing="0" >
        <thead>
            <tr class="filter-input">
                <th>PK</th>
                <th>Markası</th>
                <th>Modeli</th>
                <th></th>
            </tr>
            <tr>
                <th>PK</th>
                <th>Markası</th>
                <th>Modeli</th>
                <th></th>
            </tr>
        </thead>
    </table>

    <script type="text/javascript">

      $(document).ready(function () 
          $('#aractipiListesi').DataTable(
              "processing": true,
              "serverSide": true,
              "filter": true,
              "pageLength": 8,
              "columns": [
                  
                      "name": "ID",
                      "orderable": false
                  ,
                  
                      "name": "MARKAADI",
                      "orderable": true
                  ,
                  
                      "name": "TIPADI",
                      "orderable": true
                  ,
                  
                      "name": "SEC",
                      "orderable": false
                  
              ],
              "ajax":
                  
                      url: "@Url.Action("AracTipiAra", "Common", new  area = "" )",
                      type: "post"
                  ,
              "columnDefs":
                  [
                      
                          "render": function (data, type, row)  return AracTipiListesiTableDropDownToggle(data, type, row); ,
                          "targets": [3]
                      ,
                      
                          "visible": false,
                          "targets": [0]
                      
                  ],

              "language": DTConstants.Language


          );

          var aractipi_filtrelenecekBasliklar = ['Markası', 'Modeli'];
          // Setup - add a text input to each footer cell
          $('#aractipiListesi thead .filter-input th').each(function () 
              var title = $(this).text();
              if (title != '' && $.inArray(title, aractipi_filtrelenecekBasliklar) >= 0) 
                  $(this).html('<input type="text" placeholder="' + title + ' Ara" />');
              
          );

          // DataTable
          var table = $('#aractipiListesi').DataTable();

          // Apply the search
          table.columns().every(function () 
              var that = this;

              $('input', this.footer()).on('keyup change', function () 
                  if (that.search() !== this.value) 
                      that.search(this.value).draw();
                  
              );
          );
        );
    </script>


</div>

控制器

 public JsonResult AracTipiAra(JQDTParams param)
        
            using (var db = new MBOSSEntities())
            
                var q = from x in db.VW_ARACMARKATIPI select x;
                var nonfilteredcount = q.Count();
                //filter 
                //-------------------------------------------------------------------
                foreach (var item in param.columns)
                
                    var filterText = item.search.value;
                    if (!String.IsNullOrEmpty(filterText))
                    
                        filterText = filterText.ToLower();
                        switch (item.name)
                        
                            case "MARKAADI":
                                q = q.Where(
                       x =>
                           x.MARKAADI.ToLower().Contains(filterText)

                   );
                                break;
                            case "TIPADI":
                                q = q.Where(
                       x =>
                           x.TIPADI.ToLower().Contains(filterText)

                   );
                                break;
                        
                    
                
                //order
                //-------------------------------------------------------------------
                foreach (var item in param.order)
                
                    string orderingFunction = "MARKAADI";
                    switch (item.column)
                    
                        case 1: orderingFunction = "MARKAADI";
                            break;

                        case 2: orderingFunction = "TIPADI";
                            break;

                    

                    q = OrderClass.OrderBy<VW_ARACMARKATIPI>(q, orderingFunction, item.dir.GetStringValue());
                

                //result
                //-------------------------------------------------------------------
                var filteredCount = q.Count();
                q = q.Skip(param.start).Take(param.length);
                var data = q.ToList()
                    .Select(r => new[] 
                        r.ARACMARKAPK.ToString(),
                        r.MARKAADI,
                        r.TIPADI,
                    

                    );
                return Json(new
                
                    draw = param.draw,
                    recordsTotal = nonfilteredcount,
                    recordsFiltered = filteredCount,
                    data = data
                , JsonRequestBehavior.AllowGet);

            

        

【讨论】:

将关联数组转换为 php 中其值的简单数组

】将关联数组转换为php中其值的简单数组【英文标题】:Convertanassociativearraytoasimplearrayofitsvaluesinphp【发布时间】:2013-02-1723:18:33【问题描述】:我要转换数组:Array([category]=>category[post_tag]=>post_tag[nav_menu]=>nav_menu[link_category... 查看详情

将单行向量(数组)赋值转换为经典数组,C++ 转换为 C

】将单行向量(数组)赋值转换为经典数组,C++转换为C【英文标题】:Convertaonelinevector(array)assignationtoclassicalarray,C++translationtoC【发布时间】:2020-04-2806:21:19【问题描述】:我正在尝试转换MollerTrumbore算法,如here所示。这段代码... 查看详情

C将一维数组转换为二维数组

】C将一维数组转换为二维数组【英文标题】:Cconverta1Darrayintoa2Darray【发布时间】:2021-11-2311:28:49【问题描述】:我正在尝试转换一维数组(81个字符+空)并将其放入9x9的字符网格中。voidconvertArray(charlineHolder[])lineHolder[];//Iwantthis... 查看详情

如何将表列转换为数组?

】如何将表列转换为数组?【英文标题】:Howtotransfertablecolumnintoarray?【发布时间】:2017-11-2617:01:01【问题描述】:我想将表格column分成这样的数组格式:[A,B,C],[A,B,C],[A,B,C],[A,B,C]现在我只知道如何将表格行转换为字符串:A,A,A,A,B,... 查看详情

将c多维数组转换为多维c++向量

】将c多维数组转换为多维c++向量【英文标题】:convertcmultidimensionalarraytomultidimensionalc++vector【发布时间】:2021-05-1110:12:52【问题描述】:我正在尝试将c多维数组转换为多维c++向量,我的意思是,将类似intarr[2][3]=1,2,3,4,5,6;的内容... 查看详情

将 C/C++ 向量快速转换为 Numpy 数组

】将C/C++向量快速转换为Numpy数组【英文标题】:FastconversionofC/C++vectortoNumpyarray【发布时间】:2011-03-2419:13:38【问题描述】:我正在使用SWIG将一些C++代码粘合到Python(2.6)中,其中一部分粘合包括一段代码,用于将C++端的大数据字... 查看详情

C/C++ 将 8 字节数组转换为 64 位整数

】C/C++将8字节数组转换为64位整数【英文标题】:C/C++Convertanarrayof8bytesintoa64-bitinteger【发布时间】:2019-11-2009:39:31【问题描述】:在我的一项任务中,我需要将DWORD存储到BYTE(s)中,然后将它们转换回来。平台仅适用于windows。我在... 查看详情

C: 将数组转换为 RGB 图像

】C:将数组转换为RGB图像【英文标题】:C:ConvertarraytoRGBimage【发布时间】:2014-08-2418:20:48【问题描述】:在C中,我有一个长度为3*DIM*DIM的无符号字符(即0到255之间)的一维数组,它表示DIM*DIM像素图像,其中前3个像素是第一个像... 查看详情

如何将指向c数组的指针转换为python数组

】如何将指向c数组的指针转换为python数组【英文标题】:Howtoconvertpointertocarraytopythonarray【发布时间】:2011-11-2412:19:10【问题描述】:我有一个使用ctypes调用Python的C++回调函数。这个函数的参数是一个指向双精度数组和元素个数... 查看详情

如何将简单的php数组转换为带头的json数据

】如何将简单的php数组转换为带头的json数据【英文标题】:Howtoconvertsimplephparrayintojsondatawithheads【发布时间】:2021-08-1206:39:14【问题描述】:我在WordPress中获取帖子对象数据,这是我的代码$pre_items=get_post_meta($post_object->ID,\'rudr... 查看详情

将 C 字符数组转换为字符串

】将C字符数组转换为字符串【英文标题】:ConvertingaCchararraytoaString【发布时间】:2015-02-1121:07:30【问题描述】:我有一个与C库互操作的Swift程序。这个C库返回一个内部带有char[]数组的结构,如下所示:structrecordcharname[8];;定义已... 查看详情

将C的char数组转换为C++的字符串

】将C的char数组转换为C++的字符串【英文标题】:ConvertchararrayofCintostringofC++【发布时间】:2015-06-0304:29:29【问题描述】:我需要将C的char数组转换为字符串c++,但char数组是struct的一个元素。代码:这是我的C结构typedefstructmyStructch... 查看详情

将 char 数组转换为 uint16_t 数组 C/C++

】将char数组转换为uint16_t数组C/C++【英文标题】:Convertingchararraytouint16_tarrayC/C++【发布时间】:2020-04-2012:26:42【问题描述】:我编写了以下代码,将数据从名为str的字符串(字符数组)转换并存储到名为arr16bit的16位整数数组中代... 查看详情

elasticsearch 将数据转换为数组

】elasticsearch将数据转换为数组【英文标题】:elasticsearchtransformdatatoarray【发布时间】:2020-12-2409:05:30【问题描述】:我想用ES来计算用户留存率:1、事件日志到默认索引2、转化为中间索引:以实体为中心的数据,按acc分组3、使... 查看详情

将关联数组转换为普通数组

】将关联数组转换为普通数组【英文标题】:convertassociatearraytonormalarray[duplicate]【发布时间】:2017-01-1002:45:06【问题描述】:这是我的数组$array=array(1=>\'A\',2=>\'B\',3=>\'C\',4=>\'D\',5=>\'E\',);我想像这样转换它array(\'A\',\'B\',... 查看详情

基于键将大型关联数组转换为局部变量

】基于键将大型关联数组转换为局部变量【英文标题】:Convertinglargeassociativearraysintolocalvariables,basedonkey【发布时间】:2012-04-1516:35:46【问题描述】:我发现自己经常想做的一件事是将大型关联数组,通常从POST请求(例如,具有... 查看详情

C使用数组将字符串转换为整数

】C使用数组将字符串转换为整数【英文标题】:CConvertstringtointegerusingarrays【发布时间】:2016-04-1712:48:49【问题描述】:我正在制作一个程序,用户输入等级(1到5),然后将等级添加到数组中以供以后检查。当用户输入字母“s... 查看详情

如何将两个单维数组转换为一个多维数组-php(代码片段)

这是我的代码,我在数组中取post值并将它们分成2个单维数组,即偶数和奇数。$seed_pairing=$this->input->post('seed');if($seed_pairing)$even_array=array();for($i=0;$i=count($seed_pairing);$i++)if($i%2==0&&$i!=0)$even_array 查看详情