2016-07-05 7 views
1

ActionLink 클릭시 내 응용 프로그램 사용자의 역할을 제거하려고하는데 성공하면 Viewbag 메시지를 보냅니다. 현재 내가 겪고있는 문제는 역할에서 사용자를 제거하려고하면 페이지가 새로 고쳐집니다. 그 이유는 관리자가 응용 프로그램을 간결하게 유지하기 위해 동일한 페이지에서 요청하고 삭제하는 역할 목록을 가져올 수 있기를 원하기 때문입니다. 여기 내 컨트롤러 액션입니다 : 여기같은보기에서 같은 컨트롤러에서 2 개의 다른 액션 결과를 어떻게 수행합니까?

public ActionResult DeleteRoleForUser() 
{ 
    var list = _context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList(); 
    ViewBag.Roles = list; 
    return RedirectToAction("GetRoles"); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult DeleteRoleForUser(string UserName, string RoleName) 
{ 
    var account = new AccountController(); 
    ApplicationUser user = _context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)); 

    if (account.UserManager.IsInRole(user.Id, RoleName)) 
    { 
     account.UserManager.RemoveFromRole(user.Id, RoleName); 
     ViewBag.Message = "Role removed from this user successfully!"; 
     return View("GetRoles"); 
    } 
    var list = _context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList(); 
    ViewBag.Roles = list; 

    return View("GetRoles"); 
} 

내보기에서 삭제 링크입니다

@Html.ActionLink("Remove Role", "DeleteRoleForUser", new{controller = "Role"}) 

나는 목록 상자를 사용하여 DeleteRoleForUser와 함께 스스로에 의해 다른보기에 별도로/제대로 작동 DeleteRoleForUserGetRoles 컨트롤러가 그러나 데이터베이스의 모든 역할을 표시하려면 앞에서 설명한 것처럼 두 가지 기능을 결합하고 싶습니다.

enter image description here

답변

0

먼저, 액션 링크는 GET 요청이 아닌 POST를 발행하기 위해서는 브라우저의 원인이됩니다. 따라서 [HttpPost] 속성을 적절하게 변경해야합니다.

둘째, 매개 변수를 메서드에 전달하지 않습니다. 링크를

@Html.ActionLink("Remove Role", "DeleteRoleForUser", new{ controller = "Role", UserName="username", RoleName="role"}) 
으로 변경해야합니다.