为什么每次单击DataTable中的按钮时都会传递0,而不是它应该传递的Id



我希望我的按钮传递行中元素的Id。通过使用浏览器中的开发人员工具,我可以看到按钮包含行中元素的Id。但是,当我按下按钮时,每次都会通过0。按钮在jQuery DataTable中。以下是DataTable代码:

<html>
<head>
<!--CSS for DataTables-->
<link href="//cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css" rel="stylesheet" />
</head>
<body>
<h1>All Accounts</h1>
<br />
<br />
<div>
<table id="allAccounts" class="table table-striped table-bordered" style="width:100%">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Organization</th>
<th>State</th>
<th>Actions</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div>
<a asp-action="Index">Back to Home</a>
</div>

</body>
</html>

@section Scripts{
<script type="text/javascript" src="~/lib/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="//cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#allAccounts').DataTable(
{
"responsive": true,
"ajax": {
"url": "/api/User/GetUsers",
"dataSrc": ""
},
"columns": [
{ "data": "FirstName" },
{ "data": "LastName" },
{ "data": "Organization" },
{ "data": "State" },
{
"data": "Id",
"render": function (data, type, row, meta) {
return "<button class='btn btn-danger' style=margin-right:5px; onclick=DeleteUser(" + row.Id + ")>Delete</button>"
}
}
]
});
});

function DeleteUser(data) {
$.ajax({
"type": "POST",
"url": "/api/User/Delete",
"data": data
})
}
</script>
}

用户控制器中的Delete方法如下:

[HttpPost]
public IActionResult Delete(int data)
{

return RedirectToAction("DeleteUserConfirm", "Home", data);
}

家庭控制器方法如下:

[HttpGet]
public IActionResult DeleteUserConfirm(int id)
{

return View(_userRepository.GetUser(id));

}

GetUser((有效,我可以看到它从数据库中获取对象。但是,不会显示DeleteUserConfirm页面。我也尝试过使用ViewData。模型=_userRepository。GetUser(id(;return View((;这也不起作用。

我知道重定向到另一个控制器不是最佳做法。然而,在这一点上,我只希望按钮传递正确的数据。零被传递给用户控制器,所以我知道Ajax url正在将数据传递给正确的方法。但是,正在传递的数据不正确。任何关于如何让按钮传递行中元素的Id的建议都将不胜感激!

您的控制器方法缺少[FromBody]

[HttpPost]
public IActionResult Delete([FromBody]int data)
{    
return RedirectToAction("DeleteUserConfirm", "Home", data);
}

Ajax调用缺少

contentType: 'application/json; charset=utf-8'

你将不得不使用这个数据

JSON.stringify(data)

你的重定向应该像这个

return RedirectToAction("DeleteUserConfirm", "Home", new { id = data });

最新更新