[英]Creating manage user roles page - razor pages
I am following a tutorial on how to create a Manage user roles page for each identity user.我正在学习如何为每个身份用户创建管理用户角色页面的教程。 The only problem I have is that the tutorial is for MVC and I am using razor pages not MVC.
我遇到的唯一问题是教程是针对 MVC 的,而我使用的是 razor 页面而不是 MVC。
I am trying to convert the following code so that it works on my razor pages, I've managed to do some but other parts is proving difficult.我正在尝试转换以下代码,以便它可以在我的剃刀页面上运行,我已经设法做到了一些,但事实证明其他部分很困难。
Here is the code that would go in the Controller if i were using MVC:如果我使用 MVC,这里是控制器中的代码:
[HttpGet]
public async Task<IActionResult> ManageUserRoles(string userId)
{
ViewBag.userId = userId;
var user = await userManager.FindByIdAsync(userId);
if (user == null)
{
ViewBag.ErrorMessage = $"User with Id = {userId} cannot be found";
return View("NotFound");
}
var model = new List<UserRolesViewModel>();
foreach (var role in roleManager.Roles)
{
var userRolesViewModel = new UserRolesViewModel
{
RoleId = role.Id,
RoleName = role.Name
};
if (await userManager.IsInRoleAsync(user, role.Name))
{
userRolesViewModel.IsSelected = true;
}
else
{
userRolesViewModel.IsSelected = false;
}
model.Add(userRolesViewModel);
}
return View(model);
}
I have convert it to the following and put it in the OnGet section of my page model.我已将其转换为以下内容并将其放入页面模型的 OnGet 部分。
[BindProperty]
public RolesViewModel RolesViewModel { get; set; }
public List<RolesViewModel> model { get; set; }
public async Task<IActionResult> OnGetAsync(string userId)
{
var user = await UserManager.FindByIdAsync(userId);
if (user == null)
{
return NotFound();
}
foreach (var role in roleManager.Roles)
{
RolesViewModel = new RolesViewModel
{
RoleId = role.Id,
RoleName = role.Name
};
if (await UserManager.IsInRoleAsync(user, role.Name))
{
RolesViewModel.IsSelected = true;
}
else
{
RolesViewModel.IsSelected = false;
}
model.Add(RolesViewModel);
}
ViewData["model"] = model;
return Page();
}
The part thats proving difficult is the html:证明困难的部分是html:
This is their html from the tutorial.这是教程中的 html。
@model List<UserRolesViewModel>
@{
var userId = ViewBag.userId;
}
<form method="post">
<div class="card">
<div class="card-header">
<h2>Manage User Roles</h2>
</div>
<div class="card-body">
@for (int i = 0; i < Model.Count; i++)
{
<div class="form-check m-1">
<input type="hidden" asp-for="@Model[i].RoleId" />
<input type="hidden" asp-for="@Model[i].RoleName" />
<input asp-for="@Model[i].IsSelected" class="form-check-input" />
<label class="form-check-label" asp-for="@Model[i].IsSelected">
@Model[i].RoleName
</label>
</div>
}
<div asp-validation-summary="All" class="text-danger"></div>
</div>
<div class="card-footer">
<input type="submit" value="Update" class="btn btn-primary"
style="width:auto" />
<a asp-action="EditUser" asp-route-id="@userId"
class="btn btn-primary" style="width:auto">Cancel</a>
</div>
</div>
</form>
Could someone let me know what parts o the code I need to change for it to work for me?有人可以让我知道我需要更改代码的哪些部分才能为我工作吗?
Your Page shold be like below:您的页面应该如下所示:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
@{
var userId = ViewBag.userId;
}
<form method="post">
<div class="card">
<div class="card-header">
<h2>Manage User Roles</h2>
</div>
<div class="card-body">
@for (int i = 0; i < Model.model.Count; i++)
{
<div class="form-check m-1">
<input type="hidden" asp-for="@Model.model[i].RoleId" />
<input type="hidden" asp-for="@Model.model[i].RoleName" />
<input asp-for="@Model.model[i].IsSelected" class="form-check-input" />
<label class="form-check-label" asp-for="@Model.model[i].IsSelected">
@Model.model[i].RoleName
</label>
</div>
}
<div asp-validation-summary="All" class="text-danger"></div>
</div>
<div class="card-footer">
<input type="submit" value="Update" class="btn btn-primary"
style="width:auto" />
<a asp-page="EditUser" asp-route-id="@userId"
class="btn btn-primary" style="width:auto">Cancel</a>
</div>
</div>
</form>
Also, you backend code need modify like below:此外,您的后端代码需要修改如下:
[BindProperty]
public RolesViewModel RolesViewModel { get; set; }
public List<RolesViewModel> model { get; set; }
public async Task<IActionResult> OnGetAsync(string userId)
{
model = new List<RolesViewModel>(); //add this...
var user = await UserManager.FindByIdAsync(userId);
if (user == null)
{
return NotFound();
}
foreach (var role in roleManager.Roles)
{
RolesViewModel = new RolesViewModel
{
RoleId = role.Id,
RoleName = role.Name
};
if (await UserManager.IsInRoleAsync(user, role.Name))
{
RolesViewModel.IsSelected = true;
}
else
{
RolesViewModel.IsSelected = false;
}
model.Add(RolesViewModel);
}
ViewData["userId"] = userId; //change here which matches the frontend `ViewBag.userId`
return Page();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.