这个问题在这里已有答案:
我在视图中创建了一个删除操作方法和一个操作按钮,但我不断收到错误。有人可以看看代码并告诉我有什么问题吗?
public async Task<IActionResult> DeleteUserd(string Id)
{
//get User Data from Userid
var user = await _usermanager.FindByIdAsync(Id);
//List Logins associated with user
var logins = user;
//Gets list of Roles associated with current user
var rolesForUser = await _usermanager.GetRolesAsync(user);
using (var transaction = _application.Database.BeginTransaction())
{
if (rolesForUser.Count() > 0)
{
foreach (var item in rolesForUser.ToList())
{
// item should be the name of the role
var result = await _usermanager.RemoveFromRoleAsync(user, item);
}
}
//Delete User
await _usermanager.DeleteAsync(user);
TempData["Message"] = "User Deleted Successfully. ";
TempData["MessageValue"] = "1";
//transaction.commit();
}
return RedirectToAction("UsersWithRoles", "ManageUsers");
}
这是视图按钮:
<a asp-action="DeleteUserd">Delete</a>
您的链接未传递要删除的ID。因此,action param为null,当你将它传递给FindByIdAsync
时,你会得到一个异常,因为param不能为null。
简单地说,您只需要将链接更改为:
<a asp-action"DeleteUserId" asp-route-id="@user.Id">Delete</a>
其中@user
将是删除链接所针对的特定用户。
但是,您的方法存在许多问题。删除等原子操作不应该通过GET请求发生,而GET请求始终是基本链接。相反,你使用表单/ AJAX并通过POST或最好DELETE提交,如果可以的话。
您还需要确保当前用户有权实际删除用户,或者您正在为自己打开一场大规模灾难。最后,您应确保当前登录的用户无法自行删除,这显然会有问题。