Привязать все данные в JQuery Datatables от View To Controller
Я привязываю свои данные в представлении к контроллеру, поэтому позже я мог делать то, что хочу с данными. В моем представлении im использует dataTable
и @Html.EditorForModel()
для рендеринга моего представления.
Вид
<form action="xx" method="POST">
<table id="myTable" class="table table-bordered table-hover table-striped">
<thead>
<tr>
<th></th>
<th>
@Html.DisplayNameFor(model => model.Field1)
</th>
<th>
@Html.DisplayNameFor(model => model.Field2)
</th>
<th>
@Html.DisplayNameFor(model => model.Field3)
</th>
</tr>
</thead>
<tbody>
@if (Model != null)
{
@Html.EditorForModel()
}
</tbody>
<tfoot></tfoot>
</table>
<input type="submit" value="submit" />
</form>
Script
$("#myTable").dataTable({
searching: false,
ordering: false,
responsive: true,
"bLengthChange" : false,
"pageLength": 20,
"bStateSave": true
});
контроллер
[HttpPost]
public ActionResult MyAction(List<MyModel> MyListModel)
Этот метод отлично работает, если данные не более 1 страницы в dataTables
. если его более 1 страницы, то My Controller может либо получить List Data
первой страницы, либо не получить ничего (null)
Как мне привязать все мои данные в dataTables
от View to Controller? Эта привязка должна включать все страницы, а не только первую
Ответы
Ответ 1
Я не уверен, как вы запускаете обновление данных, поэтому, полагая, что это кнопка, следует работать:
$('#your-button').on('click', function(e){
var data = ('#myTable').DataTable().$('input,select,textarea').serialize();
$.ajax({
url: '/MyController/MyAction/',
data: data,
success: function(){
alert('success');
},
error: function(){
alert('failure');
}
});
});
Изменить 1:
Как этот ответ на Как отправить данные для всей таблицы с помощью jQuery DataTables, если вы При использовании формы используйте следующее:
var table = $('#myTable').DataTable();
$('#myForm').on('submit', function(e){
var form = this;
var params = table.$('input,select,textarea').serializeArray();
$.each(params, function(){
if(!$.contains(document, form[this.name])){
$(form).append(
$('<input>')
.attr('type', 'hidden')
.attr('name', this.name)
.val(this.value)
);
}
});
});
Ответ 2
так как вам не нужен какой-либо ajax
Используйте Исходные данные Javascript, передайте свою модель в представление, сериализуйте ее и используйте в качестве источника
var myData = @Html.Raw(Json.Encode(Model.ListOfData));
//then pass it to the datatable
$('#example').DataTable( {
data: myData,
columns: [
{ title: "col1" },
{ title: "col2" },
etc ...
]
} );
Ответ 3
С помощью DataTables в DOM существуют только текущие данные страницы. Если вы отправляете форму, на сервер отправляются только текущие данные страницы. Одним из решений этого является передача данных через ajax:
var myTable = $('#myTable').DataTable();
$('#your-form').on('submit', function(e){
e.preventDefault();
//serialize your data
var data = myTable.$('input,select,textarea').serialize();
$.ajax({
url: '@Url.Action('MyAction', 'MyController')',
data: data,
success: function(responseData){
//do whatever you want with the responseData
}
});
});
Ответ 4
Вам нужно использовать метод data() для получения данных для всей таблицы:
$('#your-form').on('submit', function(e){
e.preventDefault();
var table = $('#myTable').DataTable();
var data = table.data();
$.ajax({
url: '/MyController/MyAction/',
type: 'POST',
dataType: 'json',
contentType: "application/json;",
data: JSON.stringify(data),
success: function(){
alert('success');
},
error: function(){
alert('failure');
}
});
Ответ 5
Пройдите по следующей ссылке
https://www.codeproject.com/Articles/155422/jQuery-DataTables-and-ASP-NET-MVC-Integration-Part