在 asp.net WebApi 中将 table 数据序列化为 IEnumerable
Serialize table data as IEnumerable within asp.net WebApi
我有一个网络 api 应用程序,其中有这段代码
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 部分填写 table 是这样的:
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
作为值。
所以我需要知道:
- 我必须选择什么类型的控制器参数?
- 为什么值为空?
- 如何修复我的代码?
谢谢,
您需要正确命名您的输入。
我已经尝试了以下方法并且它对我有用 - 只需像这样替换 obj[index].属性 中输入的 'name' 属性:
<tr><td><input type="text" readonly name="obj['+i+'].id" value="'+ chauffeur.id+'" /> </td>'
+ '<td><input type="text" name="obj['+i+'].Nom" ...
(假设 .id 和 .Nom 是您模型中的属性)
我有一个网络 api 应用程序,其中有这段代码
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 部分填写 table 是这样的:
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
作为值。
所以我需要知道:
- 我必须选择什么类型的控制器参数?
- 为什么值为空?
- 如何修复我的代码?
谢谢,
您需要正确命名您的输入。
我已经尝试了以下方法并且它对我有用 - 只需像这样替换 obj[index].属性 中输入的 'name' 属性:
<tr><td><input type="text" readonly name="obj['+i+'].id" value="'+ chauffeur.id+'" /> </td>'
+ '<td><input type="text" name="obj['+i+'].Nom" ...
(假设 .id 和 .Nom 是您模型中的属性)