Asp.net 找到用于更新用户角色的代码,但未找到';t显示[HttpGet]方法或ViewPage
我发现一些代码声称是更新用户角色的成功方法。但是,该解决方案仅显示[HttpPost]方法的代码。由于我是ASP.NET MVC新手,我不确定我的[HttpGet]方法或我的ViewPage中会出现什么 只是想知道是否有人可以看一下代码,或许可以给我一些建议,或者给我一个全新的方向 我将显示我目前拥有的代码,因为当我更改附加到用户的角色时,角色不会更新 谢谢Asp.net 找到用于更新用户角色的代码,但未找到';t显示[HttpGet]方法或ViewPage,asp.net,asp.net-mvc,model-view-controller,Asp.net,Asp.net Mvc,Model View Controller,我发现一些代码声称是更新用户角色的成功方法。但是,该解决方案仅显示[HttpPost]方法的代码。由于我是ASP.NET MVC新手,我不确定我的[HttpGet]方法或我的ViewPage中会出现什么 只是想知道是否有人可以看一下代码,或许可以给我一些建议,或者给我一个全新的方向 我将显示我目前拥有的代码,因为当我更改附加到用户的角色时,角色不会更新 谢谢 [HttpGet] public ActionResult ManageUserRoles()
[HttpGet]
public ActionResult ManageUserRoles()
{
var roleList = _context.Roles.OrderBy(r => r.Name).ToList().Select(rr =>
new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = roleList;
var userList = _context.Users.OrderBy(u => u.UserName).ToList().Select(uu =>
new SelectListItem { Value = uu.UserName.ToString(), Text = uu.UserName }).ToList();
ViewBag.Users = userList;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ManageUserRoles(string UserName, string RoleName)
{
ApplicationUser user = _context.Users.Where(u => u.UserName.Equals(UserName,
StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(_context));
var roleList = _context.Roles.OrderBy(r => r.Name).ToList()
.Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = roleList;
var userList = _context.Users
.OrderBy(u => u.UserName).ToList()
.Select(uu => new SelectListItem { Value = uu.UserName.ToString(), Text = uu.UserName }).ToList();
ViewBag.Users = userList;
return View("ManageUserRoles");
顾名思义,HTTP GET操作通常只获取一些内容。POST用于通过请求主体将数据传递回服务器,PUT或补丁更新现有数据,DELETE删除数据 您表示不知道GET操作会发生什么。你想要什么 通常,在GET操作中,您可以传入特定实体的标识符来检索或排除任何参数,以便列出所有内容 目前还不清楚你具体想做什么,但如果你想得到(比如)这个角色本身,你可能会:
[HttpGet("role/{roleId}")]
public virtual IActionResult GetRole(int roleId) //Can't tell from your code what type Id uses
{
var role = DB.Roles.SingleOrDefault(r => r.Id == roleId);
return Ok(role);
}
当然,您可能希望将此结果映射到某种其他类,因为调用方可能不需要存储在数据库中的所有信息
您提到对代码提出建议-代码是否存在需要更改的错误?您只是在寻找优化吗?是否要创建一个视图来显示用户?看起来基本的MVC教程将介绍如何从操作方法返回视图结果。你研究了什么?你试过什么了?谢谢你的回复。我想显示一个用户及其关联的用户角色。然后我想从下拉选择中更新UserRole。我已经发布了问题中的代码。目前,在更改用户角色时,不会更新数据库。感谢您的回复!我现在在视图中看到的是我的用户下拉列表和我的角色列表。当我更改用户的角色时,它不会保存到数据库中。因此,我正在寻找其他的方法。目前我的观点不是强类型的。我将发布我在上面的逻辑。你的帖子表明你从StackOverflow中提取了很多想法,但是逻辑本身和你的意图表明你并不真正理解你所放置的代码中发生了什么。原始的POST方法不会保存任何数据,它只是从上下文中读取数据。您的第二个POST方法可能是保存数据,但使用了一个没有提供代码的存储库类,所以谁知道它在做什么。忘了其他SO帖子吧——这是你的代码,还有什么东西做得不够好?
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult ManageUser(ApplicationUser user, string role)
{
if (ModelState.IsValid)
{
var oldUser = _userManager.FindById(user.Id);
var oldRoleId = oldUser.Roles.SingleOrDefault().RoleId;
var oldRoleName = _context.Roles.SingleOrDefault(r => r.Id == oldRoleId).Name;
if (oldRoleName != role)
{
_userManager.RemoveFromRole(user.Id, oldRoleName);
_userManager.AddToRole(user.Id, role);
}
_context.Entry(user).State = System.Data.Entity.EntityState.Modified;
return RedirectToAction("GetAllApplicationUsers", "UserAdmin");
}
return View(user);
}
[HttpGet("role/{roleId}")]
public virtual IActionResult GetRole(int roleId) //Can't tell from your code what type Id uses
{
var role = DB.Roles.SingleOrDefault(r => r.Id == roleId);
return Ok(role);
}