如何在asp.net核心的剃须刀页面中将用户添加到创建的角色中

问题描述 投票:-1回答:1

我通过遵循.net核心文档(Create an ASP.NET Core app with user data protected by authorization)创建了一个应用。

一切对我来说都很好。但是我想将注册用户添加到类似admin和manager的角色中,并且从角色中删除,我还可以通过选择复选框来获取用户列表并将其分配给角色。我也想以同样的方式删除用户。

我尝试了MVC核心中的方法,但无法返回view()方法。

在Razor Pages中,我找不到返回View(model)的另一种方法;方法。返回Page();在剃须刀页面上不起作用。

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();

}
c# asp.net-core asp.net-identity razor-pages
1个回答
0
投票

在Razor Pages中,我找不到返回View(model)的另一种方法;方法。返回Page();在剃须刀页面上不起作用。

在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

© www.soinside.com 2019 - 2024. All rights reserved.