2015-11-23 30 views
1

我有一個Web API應用程序,其中我有此代碼序列化表的數據爲IEnumerable

public class FiltredDriverAgendaModel 
    { 
     public int Id_driver_agenda { get; set; } 
     public string name_driver_agenda { get; set; } 
     public bool isDriveChecked { get; set; } 
    } 

HTML部分

<table id="tbldriver" class="table table-bordered table-striped"> 
              <thead> 
               <tr style="color:white;background-color:#3c8dbc"> 
                <th>Id chauffeur</th> 
                <th>Chauffeur</th> 
                <th> </th> 

               </tr> 
              </thead> 
              <tbody id="tbldriverBody"></tbody> 
             </table> 

我填補這個表中javascript部分是這樣的:

function GetFiltredDrivers() { 
     $.ajax({ 
      type: "Get", 
      url: "/api/AccountManage/GetAllChauffeurs", 
      success: function (data) { 
       EmptyGridFilter(); 
       for (var i = 0; i < data.length; i++) { 
        var chauffeur = data[i]; 
        $('#tbldriverBody').append('<tr><td><input type="text" readonly name="Id_driver_agenda" value="'+ chauffeur.id+'" /> </td>' 
        + '<td><input type="text" name="name_driver_agenda" readonly value="' + chauffeur.Nom + " " + chauffeur.Prenom + '" /></td>' 
        + '<td><input type="checkbox" name="isDriveChecked" checked /> </td></tr>'); 
       } 
       initGridDriver(); 

       } 
     }); 
    } 
function initGridDriver() { 
    var table = $('#tbldriver').dataTable({ 
     "processing": true, 
     "bPaginate": true, 
     "bLengthChange": false, 
     "bFilter": true, 
     "bSort": false, 
     "bInfo": true, 
     "responsive": true, 
     "scrollX": true, 
     "scrollY": "200px", 
     "scrollCollapse": true, 
     "bAutoWidth": false, 
     "language": { "url": "//cdn.datatables.net/plug-ins/1.10.7/i18n/French.json" }, 
     "lengthMenu": [[50, 100, 250, 500, -1], [50, 250, 500, "Tout"]], 
     "destroy": true, 
     "columnDefs": [ 
    { "width": "20%", "targets": 0 }, 
    { "width": "50%", "targets": 1 }, 
    { "width": "30%", "targets": 2 } 

     ], 
     "bAutoWidth": false 
    }); 

    $("#tbldriver tr").css('cursor', 'pointer'); 

    $('#tbldriverBody').on('click', 'tr', function() { 

     if ($(this).hasClass('selected')) { 
      $(this).removeClass('selected'); 
     } 
     else { 

      table.$('tr.selected').removeClass(); 
      $(this).addClass('selected'); 

     } 

    }); 

} 

而且我做了這個Ajax調用:

$.ajax({ 
     type: "post", 
     async: false, 
     url: "/api/Demande/ReservationAgendaByDrivers", 
     data: $("#tbldriver input").serialize(), 
     success: function (data) { 
     ............. 
     } 

問題是,當我創建服務ReservationAgendaByDrivers這樣的:

[HttpPost] 
     public IEnumerable<ReservationModel> ReservationAgendaByDrivers(List<FiltredDriverAgendaModel> obj) {} 

我得到這個問題:總是obj需要null作爲值。

所以我需要知道:

  1. 是什麼,我必須選擇控制器的參數的類型?
  2. 爲什麼值爲空?
  3. 我該如何修復我的代碼?

感謝,

+1

我會先通過瀏覽器的開發人員工具/網絡選項卡檢查ajax調用發佈的數據。你能粘貼它嗎?或者,您可以將其警報或將其寫入控制檯日誌。 –

+0

@OguzOzgul這個數據'Id_driver_agenda = 15&name_driver_agenda = driver2aj + driver2aj&Id_driver_agenda = 14&name_driver_agenda = driver1aj + driver1aj&Id_driver_agenda = 11&name_driver_agenda = ledriver + ledriver&isDriveChecked = ON&Id_driver_agenda = 7&name_driver_agenda = afifement + afifement&isDriveChecked = ON&Id_driver_agenda = 5&name_driver_agenda =特殊+特殊&isDriveChecked = ON&Id_driver_agenda = 1&name_driver_agenda = driverkkkk +駕駛員isDriveChecked = on' –

+0

它說,serialize方法會創建一個類似於數據的查詢字符串,它永遠不會轉換爲您自己的類的列表。 initgriddriver的方法體在這裏也需要幫助。 –

回答

1

您需要正確地命名您的輸入。

我試過以下,它的工作我 - 只需更換您輸入的OBJ [指數]的name屬性.property這樣的:

<tr><td><input type="text" readonly name="obj['+i+'].id" value="'+ chauffeur.id+'" /> </td>' 
       + '<td><input type="text" name="obj['+i+'].Nom" ... 

(假設.ID和.Nom是你的模型中的屬性)