要将数据从 DataTables 发送到服务器(即发送到您的控制器),请使用 ajax 函数的 data 选项。所以,首先,添加:
ajax: {
type: "GET",
url: "@Url.Action("Getdata","Cart")",
data: function() {
return dataToSend;
}
},
您在document.ready 函数的开头将dataToSend 声明为一个空的JavaScript 对象:
var dataToSend = {};
这是我的<a> 标签的简化版:
<a id="linkOne" linkData="pending" href="#">submit</a>
在dataToSend 声明之后,我为<a> 标签添加了以下点击处理程序:
$("a#linkOne").on('click', function() {
event.preventDefault();
var linkDataValue = $( this ).attr( 'linkData' )
dataToSend = { "linkData": linkDataValue };
//console.log( dataToSend );
table.ajax.reload();
});
此代码从<a> 标记中的linkData="pending" 中提取“待定”文本,并将其添加到dataToSend 对象中。
最后,我使用 reload() 触发 DataTable ajax 调用。
在控制器中,此数据将作为标准 URL 查询参数接收(因为您使用的是GET):
linkData=pending
因此,您可以以通常的方式访问它并相应地格式化您的回复。
在您的情况下,您需要将我的dataToSend 逻辑替换为您所需的逻辑,用于您的特定<a> 标签。
这里很重要的一点是您需要正确创建dataToSend 对象。
对于一个值,它是这样创建的,如上例所示:
{ "linkData": "pending" }
如果您需要发送多个值(例如,如果您正在处理一个表单),那么您可以像这样构建一个 JavaScript 对象:
[
{
"name": "fieldOne",
"value": "x"
},
{
"name": "fieldTwo",
"value": "y"
}
]
在这种情况下,对象是一个键对值数组。
对于简单的表单,JavaScript serializeArray() 函数可以提供帮助 - 例如:
$( "#formOne" ).on( "submit", function( event ) {
event.preventDefault();
dataToSend = $( "#formOne" ).serializeArray();
//console.log( dataToSend );
table.ajax.reload();
});
更新
如果有帮助,这里是我的测试代码的完整 HTML 页面。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Personnel</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://datatables.net/media/css/site-examples.css">
</head>
<body>
<div style="margin: 20px;">
<table id="example" class="display" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>First Name</th>
<th>Name</th>
<th>Phone</th>
</tr>
</thead>
</table>
<br>
<form id ="formOne">
<input id="fieldOne" type="text" name="fieldOne"></input>
<input id="fieldTwo" type="text" name="fieldTwo"></input>
<input type="submit" value="Submit">
</form>
<br>
<a id="linkOne" linkData="pending" href="#">submit</a>
</div>
<script type="text/javascript">
$(document).ready(function() {
var dataToSend = {};
$( "#formOne" ).on( "submit", function( event ) {
event.preventDefault();
dataToSend = $( "#formOne" ).serializeArray();
//console.log( dataToSend );
table.ajax.reload();
});
$("a#linkOne").on('click', function() {
event.preventDefault();
var linkDataValue = $( this ).attr( 'linkData' )
dataToSend = { linkData: linkDataValue };
//console.log( dataToSend );
table.ajax.reload();
});
var table = $('#example').DataTable( {
ajax: {
url: "http://localhost:7000/personnel",
method: "POST",
data: function( ) {
return dataToSend;
},
dataSrc: ''
},
"columns": [
{ "data": "id" },
{ "data": "firstname" },
{ "data": "name" },
{ "data": "phone" }
]
} );
} );
</script>
</body>
</html>