Как добавить пользователей в созданные роли в бритвенных страницах ядра asp.net - PullRequest
0 голосов
/ 17 октября 2019

Я создал приложение, следуя документации ядра .net ( Создайте приложение ASP.NET Core с пользовательскими данными, защищенными авторизацией ).

У меня все работало нормально. но я хочу добавить зарегистрированных пользователей в роли, такие как администратор и менеджер, а также удалить из ролей, где я могу получить список пользователей и назначить им роль, установив флажок. Я также хочу удалить пользователей таким же образом.

Я попробовал метод из ядра MVC, но он не сработал для возврата метода view ().

В Razor Pages я не могу найти альтернативный способ возврата Просмотр (модель);метод. возврат страницы ();не работает на странице бритвы.

public class UserRoleViewModel
{
    public string UserId { get; set; }
    public string UserName { get; set; }
    public bool IsSelected { get; set; }
}
public async Task<IActionResult> OnGetAsync(int? id, string roleId)
{
    if (id == null)
    {
        return NotFound();
    }
    ViewData["roleId"] = roleId;

    var role = await RoleManager.FindByIdAsync(roleId);
    if (role == null)
    {
        ViewData["ErrorMessage"] = $"Role with Id = {roleId} cannot be found";
        return NotFound();
    }

    var model = new List<UserRoleViewModel>();

    foreach (var user in UserManager.Users)
    {
        //if (role == null)
        //{
            var userRoleViewModel = new UserRoleViewModel
            {
                UserId = user.Id,
                UserName = user.UserName
            };
        if (await UserManager.IsInRoleAsync(user, role.Name))
        {
                userRoleViewModel.IsSelected = true;
        }
            else
            {
                userRoleViewModel.IsSelected = false;
            }

        model.Add(userRoleViewModel);
        //}

    }

    return Page();

}

1 Ответ

0 голосов
/ 18 октября 2019

В Razor Pages я не могу найти альтернативный способ возврата Просмотр (модель);метод. возврат страницы ();не работает на странице бритвы.

На странице ASP.Net Core Razor вы можете использовать BindProperty в качестве альтернативного способа return(model).

Вот простая демонстрациякак показано ниже:

1.Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.UserRoleViewModels[0].UserName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.UserRoleViewModels[0].IsSelected)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.UserRoleViewModels)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.UserName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.IsSelected)
                </td>

            </tr>
        }
    </tbody>
</table>

2.Index.cshtml.cs:

public class UserRoleViewModel
{
    public string UserId { get; set; }
    public string UserName { get; set; }
    public bool IsSelected { get; set; }
}

[BindProperty]
public List<UserRoleViewModel> UserRoleViewModels { get; set; }

public async Task<IActionResult> OnGetAsync(int? id, string roleId)
{
    //...your logic
    var model = new List<UserRoleViewModel>();
    var userRoleViewModel = new UserRoleViewModel
    {
        UserId = "1",
        UserName = "aa",
        IsSelected = true
    };
    model.Add(userRoleViewModel);
    var userRoleViewModel2 = new UserRoleViewModel
    {
        UserId = "2",
        UserName = "bb",
        IsSelected = true
    };
    model.Add(userRoleViewModel2);

    UserRoleViewModels = model;// pass the model to the bind property

    return Page();
}

3.Результат:

enter image description here

Ссылка:

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.0#targets

...