我是C#MVC的新手,并且无法弄清楚如何与我要删除的特定用户建立连接。
我有一个用户名(user.UserName)
读取用户的表@using (Html.BeginForm("DeleteUser", "Manage", FormMethod.Post))
{
<table class="table">
<tr>
<th>Username</th>
<th>Role</th>
</tr>
@foreach (var user in Model)
{
<tr>
<td>
@user.UserName
</td>
<td>
@{
var roleId = user.UserRoles != null && user.UserRoles.Any() ? user.UserRoles.First().RoleId : (short) 2;
}
@Html.DropDownList(string.Format("User_{0}", user.UserId), ListProvider.GetRoles(roleId), new {})
<input type="button" data-id="@user.UserId" value="Set" class="btn btn-primary" id="btn-set"/>
<input type="submit" value="Delete" class="btn btn-danger"/>
</td>
</tr>
}
</table>
然后我在我的控制器中有一个DeleteUser Action,它链接到删除用户方法。
[HttpPost]
public ActionResult DeleteUser(string usernameToDelete)
{
var deleteUserObj = new User {UserName = usernameToDelete};
UsersContext deleteUser = new UsersContext();
deleteUser.DeleteUser(deleteUserObj);
return RedirectToAction("Index");
}
在Context中完成DeleteUser方法:
public void DeleteUser(User user)
{
Users.Remove(user);
SaveChanges();
}
我不明白的是如何将usernameToDelete连接到我想删除的特定user.Username。
任何帮助将不胜感激!提前谢谢!
答案 0 :(得分:3)
如果要删除用户,则需要让该用户不创建User
对象的新实例。
这需要改变:
var deleteUserObj = new User {UserName = usernameToDelete};
类似于:
var deleteUserObj = UserContext.LoadItemByUsername(usernameToDelete);
其中LoadItemByUsername
是一种检查数据库以使用用户名查找用户的方法。
您可能遇到的问题是,如果您的列未设置为唯一值,则搜索用户名可能会产生更多结果。
实现此目的的更恰当的方法是使用用户的ID。然后使用此主键可以直接删除用户对象。
[HttpPost]
public ActionResult DeleteUser(int id)
{
UsersContext deleteUser = new UsersContext();
deleteUser.Delete(id);
return RedirectToAction("Index");
}
其中deleteUser.Delete(id);
是需要用户PK删除对象的方法。
<强>更新强>
<a href="@Url.Action("DeleteUser", "ControllerName", new { id = user.UserId })">Delete user</a>
更新2
public void DeleteUser(int id)
{
User delObj = Users.Where(u => u.UserId == id);
Users.Remove(delObj);
SaveChanges();
}