2016-07-05 2 views
1

Ich versuche, eine Rolle von meinem Anwendungsbenutzer auf ActionLink-Klick zu entfernen, und wenn es erfolgreich ist, sende eine Viewbag-Nachricht. Das Problem, das ich derzeit habe, ist, dass wenn ich versuche, den Benutzer aus der Rolle zu entfernen, die Seite aktualisiert wird. Der Grund dafür ist, dass ich möchte, dass der Administrator eine Liste der Rollen, die er anfordert, von der gleichen Seite abrufen und löschen kann, um die Anwendung schlank zu halten. Hier ist mein Controller-Aktion:Wie führe ich zwei verschiedene ActionResults in ein und demselben Controller in derselben Ansicht aus?

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"); 
} 

Hier wird das Entfernen Link auf meiner Ansicht

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

Ich habe die DeleteRoleForUser und die GetRoles Controller ordnungsgemäß funktioniert/separat auf unterschiedlichen Ansichten von sich mit DeleteRoleForUser einer Auswahlbox mit Um alle Rollen in der Datenbank anzuzeigen, möchte ich jedoch, wie ich bereits erwähnt habe, die beiden Funktionen kombinieren.

enter image description here

Antwort

0

Zunächst wird die Aktion Link Ihren Browser verursacht eine GET-Anfrage zu erteilen, kein POST. Daher muss sich Ihr Attribut [HttpPost] entsprechend ändern.

Zweitens geben Sie keine Parameter in die Methode ein. Ihr Link muss auf

@Html.ActionLink("Remove Role", "DeleteRoleForUser", new{ controller = "Role", UserName="username", RoleName="role"}) 
geändert werden
Verwandte Themen