如何在同一视图中的同一个控制器中执行2个不同的ActionResults?

时间:2016-07-05 18:47:21

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

我正在尝试从ActionLink上的应用程序用户中删除角色,并在成功发送Viewbag消息时。我目前遇到的问题是,当我尝试从角色中删除用户时,页面正在刷新。这是因为我希望管理员能够获取他正在请求的角色列表并从同一页面删除,以保持应用程序的精益。这是我的控制器动作:

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

我让DeleteRoleForUserGetRoles控制器在DeleteRoleForUser上使用option()在不同的视图上正常/单独工作,使用列表框显示数据库中的所有角色,但是,正如我所提到的早些时候我想结合这两个功能。

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,您的操作链接将导致您的浏览器发出GET请求,而不是POST。因此,您的[HttpPost]属性需要相应更改。

其次,您不会将任何参数传递给方法。您的链接需要更改为

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