【发布时间】:2021-06-26 02:22:54
【问题描述】:
我目前正在学习 .NET Core,我正在尝试使用 ASP.NET Core MVC 3.1 中的 Identity 框架进行用户管理。在Controllers 我有一个RoleManagerController 和EditRole GET 和 POST 像这样:
[HttpGet]
public async Task<IActionResult> EditRole(string roleId)
{
ViewBag.roleId = roleId;
var role = await _roleManager.FindByIdAsync(roleId);
if (role == null)
{
ViewBag.ErrorMessage = $"Role with RoleID = {roleId} doest not exists.";
return NotFound();
}
// create new roleModel
var roleModel = new EditRoleViewModel
{
RoleId = role.Id,
RoleName = role.Name
};
// retrieve all users based on current role
foreach (var user in _userManager.Users.ToList())
{
if (await _userManager.IsInRoleAsync(user, role.Name))
{
roleModel.Users.Add(user.UserName);
}
}
return View(roleModel);
}
[HttpPost]
public async Task<IActionResult> EditRole(EditRoleViewModel roleModel)
{
var role = await _roleManager.FindByIdAsync(roleModel.RoleId);
if (role == null)
{
ViewBag.ErrorMessage = $"Role with RoleId = {roleModel.RoleId} does not exists.";
return NotFound();
}
else
{
role.Name = roleModel.RoleName;
// update the role
var updateStatus = await _roleManager.UpdateAsync(role);
// check while updating is succeed or not
if (updateStatus.Succeeded)
{
return RedirectToAction("Index");
}
foreach (var error in updateStatus.Errors)
{
ModelState.AddModelError("updating failed", error.Description);
}
}
return View(roleModel);
}
基于EditRole GET,我在Views/RoleManager 文件夹中创建了一个名为EditRole.cshtml 的视图,如下所示:
@model EditRoleViewModel
@{
ViewData["Title"] = "Edit Role";
}
<h4>Edit Role</h4><br />
<form class="" method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="RoleId" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="RoleId" class="form-control" disabled/>
</div>
</div>
<div class="form-group">
<label asp-for="RoleName" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="RoleName" class="form-control"/>
<span asp-validation-for="RoleName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Update</button>
<a asp-action="Index" class="btn btn-secondary">Cancel</a>
</div>
</div>
</form>
这是我在Startup.cs配置的东西
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
但是当我尝试编辑角色并使用角色的 id 访问路由时,页面显示no webpage was found for the web address.。我错过了什么吗?
【问题讨论】:
-
设置断点,以便您需要运行哪些行。如果您看到 404 并不奇怪,因为您的代码确实有这些行。
-
@LexLi 我已经在控制器的
EditRoleGET 中为几行设置了断点,但似乎没有触发。 -
those lines是什么意思?你能为我指出我们的吗? -
"使用角色的 id 访问路由页面" - 请显示您的视图您要访问的位置
-
@Serge 我正在尝试访问 /RoleManager/EditRole/{roleId}。我在控制器中提供了一个
EditRoleGET 并为它添加了一个视图EditRole。但是当我尝试访问该路由时,错误提示找不到该页面。
标签: c# asp.net-core-mvc