2015-06-16 47 views
0

我是C#MVC的新手,並且無法確定如何與我想要刪除的特定用戶建立連接。嘗試在.NET中通過用戶名從數據庫中刪除用戶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"); 
    } 

完全DeleteUser方法語境:

public void DeleteUser(User user) 
    { 
     Users.Remove(user); 
     SaveChanges(); 
    } 

我不明白的是如何將usernameToDelete連接到我試圖刪除特定user.Username。

任何幫助,將不勝感激!提前致謝!

回答

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刪除對象的方法。

UPDATE

<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(); 
} 
+0

感謝您的幫助!但我仍然不確定如何建立與刪除按鈕位於同一行的特定用戶的連接,因爲用戶名只是在foreach循環中讀出。 – cfly24

+0

查看更新,而不是使用提交使用超鏈接來刪除用戶。我現在不是你的控制器的名字,但你可以在代碼中改變它。也可以移除控制器方法上方的[HttpPost]標籤,因爲它採用的是GET操作而不是POST。 – Mivaweb

+0

太棒了,那麼我將不得不在我的UsersContext中更改刪除用戶方法? public void DeleteUser(用戶用戶) { Users.Remove(user); SaveChanges(); } – cfly24

相關問題