Я успешно реализовал ApplicationUser и роли в моем приложении MVC .NET Core.Однако, когда я возвращаю это к представлению, это не заполняет, что пользователь был добавлен к роли.
Вот часть, связанная с контроллерами:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit (string id, ApplicationUser applicationUser)
{
if (id != applicationUser.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
ApplicationUser userFromDb = _db.ApplicationUsers.Where(u => u.Id == id).FirstOrDefault();
userFromDb.FirstName = applicationUser.FirstName;
userFromDb.LastName = applicationUser.LastName;
if (applicationUser.IsModerator)
{
await _userManager.AddToRoleAsync(userFromDb, SD.ModeratorEndUser);
}
if (!applicationUser.IsModerator)
{
await _userManager.RemoveFromRoleAsync(userFromDb, SD.ModeratorEndUser);
}
if (applicationUser.IsOwner)
{
await _userManager.AddToRoleAsync(userFromDb, SD.OwnerEndUser);
}
if (!applicationUser.IsOwner)
{
await _userManager.RemoveFromRoleAsync(userFromDb, SD.OwnerEndUser);
}
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
Этот контроллеруспешно добавив или удалив роль, переданную ему из представления, которое я покажу ниже: (Когда я проверяю таблицу SQL - она успешно добавлена или удалена в таблицу AspNetUserRoles, так что функциональность работает - я просто не могузаставить его отображаться соответствующим образом после этого.)
@model Sentimented.Models.ApplicationUser
@{
ViewData["Title"] = "Edit";
}
<br />
<h2 class="text-info">Edit User Roles</h2>
<form method="post" asp-action="Edit">
<div class="p-4 border rounded">
<input type="hidden" asp-for="Id" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group row">
<div class="col-2">
<label asp-for="FirstName"></label>
</div>
<div class="col-5">
<input asp-for="FirstName" class="form-control" />
</div>
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
<div class="form-group row">
<div class="col-2">
<label asp-for="LastName"></label>
</div>
<div class="col-5">
<input asp-for="LastName" class="form-control" />
</div>
<span asp-validation-for="LastName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="IsModerator"></label>
<input asp-for="IsModerator" type="checkbox" class="form-control" />
</div>
<div class="form-group">
<label asp-for="IsOwner"></label>
<input asp-for="IsOwner" type="checkbox" class="form-control" />
</div>
<br />
<div class="form-group">
<input type="submit" class="btn btn-primary" asp-route-id="@Model.Id " value="Update" />
<a asp-action="Index" class="btn btn-success">Back to List</a>
</div>
</div>
</form>
@section Scripts{
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
А здесь представление индекса, которое неправильно отображает роли как ложные.
@model IEnumerable<Sentimented.Models.ApplicationUser>
@{
ViewData["Title"] = "Index";
}
<br />
<div class="row">
<div class="col-6">
<h2 class="text-info">User List</h2>
</div>
<div class="col-6 text-right">
<a asp-action="New" class="btn btn-info"><i class="fas fa-plus"></i> New Text</a>
</div>
</div>
<br />
<div>
<table class="table table-striped border">
<tr class="table-info">
<th>
@Html.DisplayNameFor(m => m.FirstName)
</th>
<th>
@Html.DisplayNameFor(m => m.LastName)
</th>
<th>
@Html.DisplayNameFor(m => m.Email)
</th>
<th>
@Html.DisplayNameFor(m => m.IsOwner)
</th>
<th>
@Html.DisplayNameFor(m => m.IsModerator)
</th>
<th>
Edit
</th>
<th>
Details
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(m => item.FirstName)</td>
<td>@Html.DisplayFor(m => item.LastName)</td>
<td>@Html.DisplayFor(m => item.Email)</td>
<td>@Html.DisplayFor(m => item.IsModerator)</td>
<td>@Html.DisplayFor(m => item.IsOwner)</td>
<td>
<a type="button" class="btn btn-primary" href="@Url.Action("Edit/" + item.Id)">
<i class="fas fa-edit"></i>
</a>
</td>
<td>
<a type="button" class="btn btn-primary" href="@Url.Action("Details/" + item.Id)">
<i class="fas fa-edit"></i>
</a>
</td>
</tr>
}
</table>
</div>
Извинения, если я включил слишком много кода- но как мне получить приведенное выше представление для возврата item.IsModerator и item.IsOwner как true и не false?
Спасибо!
Редактировать:
См. нижедля этих пользователей индекс.Оба эти пользователя назначаются на роль Владелец и Модератор через кнопку редактирования (это первый контроллер, опубликованный выше).Но по возвращении на страницу индекса он не показывает их как активные.
Индекс страницы пользователя
А вот соответствующий контроллер индекса:
public IActionResult Index()
{
var users = _db.ApplicationUsers.ToList();
return View(users);
}