Я ломаю голову, пытаясь понять, что это должно быть просто...
Я хочу получить список всех пользователей, выбрать одного из них в ‹.select>, нажать кнопку, получить все роли, назначенные этому пользователю, и вот где он терпит неудачу, вот код
public class RoleManagementModel : PageModel
{
private readonly RoleManager<ApplicationRole> _roleManager;
private readonly UserManager<ApplicationUser> _userManager;
public RoleManagementModel(RoleManager<ApplicationRole> roleManager,
UserManager<ApplicationUser> userManager)
{
_roleManager = roleManager;
_userManager = userManager;
}
[BindProperty]
public InputModel Input { get; set; }
public IList<ApplicationUser> UserList { get; set; }
public IList<string> UserRoleList { get; set; }
public IList<string> RoleList { get; set; }
public class InputModel
{
public string User { get; set; }
public string RoleToRemove { get; set; }
public string RoleToAdd { get; set; }
}
public async Task<IActionResult> OnGetAsync()
{
UserList = _userManager.Users.ToList();
UserRoleList = new List<string>();
RoleList = new List<string>();
return Page();
}
public async Task<IActionResult> OnPostGetRolesAsync()
{
var user = await _userManager.FindByNameAsync(Input.User);
UserRoleList = await _userManager.GetRolesAsync(user);
return Page();
}
}
Это страница бритвы
<select asp-for="Input.User" class="..">
@foreach (ApplicationUser au in Model.UserList)
{
<option>@au.UserName</option>
}
</select>
<button class=".." type="submit" asp-page-handler="GetRoles">Get Roles </button>
<select asp-for="Input.RoleToRemove" class="..">
@foreach (string ur in Model.UserRoleList)
{
<option>@ur</option>
}
</select>
Я пробовал следующее:
вернуть Page()
после того, как OnPostGetRolesAsync()
выдаст исключение
NullReferenceException: ссылка на объект не указывает на экземпляр объекта.
@foreach (ApplicationUser au in Model.UserList)
Я думаю, потому что OnGet
не запускается, а UserList
- это null
Если я изменю его на RedirectToPage()
, тогда OnGet
будет уволен и установит UserRoleList в новый список, и мы вернемся к исходной точке.
Удаление UserRoleList = new List<string>();
из OnGet
вызовет такое же исключение (но для UserRoleList) при попытке открыть страницу.
ваше здоровье