【问题标题】:Trying to delete user from database by Username in .NET MVC尝试通过.NET MVC中的用户名从数据库中删除用户
【发布时间】:2015-06-16 13:21:53
【问题描述】:

我是 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 操作,它链接到一个删除用户方法。

 [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。

任何帮助将不胜感激!提前致谢!

【问题讨论】:

    标签: c# sql .net asp.net-mvc


    【解决方案1】:

    如果您想删除一个用户,您需要让该用户不要创建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();
    }
    

    【讨论】:

    • 感谢您的帮助!但我仍然不确定如何连接到与删除按钮在同一行的特定用户,因为用户名只是在 foreach 循环中读出。
    • 查看更新,而不是使用提交使用超链接来删除用户。我现在不知道您的控制器名称,但您可以在代码中更改它。还要删除控制器方法上方的 [HttpPost] 标记,因为它是 GET 操作而不是 POST。
    • 太棒了,那么我将不得不更改我的 UsersContext 中的删除用户方法?公共无效删除用户(用户用户){用户。删除(用户);保存更改(); }
    • jup 允许用户的id 所以你现在要删除哪一个,查看我的答案。
    • 好的,我只是想了解如何将 UsersContext 中的删除方法更改为现在通过 id 删除用户。抱歉所有问题,我对此很陌生。
    猜你喜欢
    • 2016-12-05
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多