C# Razor页面中的Asp.net标识角色

C# Razor页面中的Asp.net标识角色,c#,asp.net-core,razor-pages,C#,Asp.net Core,Razor Pages,我有一个正在工作的RoleController及其视图,其中列出了所有角色 角色控制器类: public class RoleController : Controller { RoleManager<IdentityRole> roleManager; public RoleController(RoleManager<IdentityRole> roleManager) { this.roleManager = roleMan

我有一个正在工作的RoleController及其视图,其中列出了所有角色

角色控制器类:

public class RoleController : Controller
{
    RoleManager<IdentityRole> roleManager;

    public RoleController(RoleManager<IdentityRole> roleManager)
    {
        this.roleManager = roleManager;
    }

    public IActionResult Index()
    {
        var roles = roleManager.Roles.ToList();
        return View(roles);
    }  
}
索引视图

@model IEnumerable<Microsoft.AspNetCore.Identity.IdentityRole>
@{
    ViewData["Title"] = "Index";
}

<h1>List of Roles</h1>
<a asp-action="Create">Create</a>
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var role in Model)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    <form asp-action="Delete" asp-route-id="@role.Id" method="post">
                        <button type="submit" class="btn btn-sm btn-danger">
                            Delete
                        </button>
                    </form>
                </td>
            </tr>

        }
    </tbody>
</table>  
现在,我想将这些代码迁移到Razor页面。这就是我所创造的:

public class IndexModel : PageModel
{
    RoleManager<IdentityRole> roleManager;

    public IndexModel(RoleManager<IdentityRole> roleManager)
    {
        this.roleManager = roleManager;
    }

    public async Task<IActionResult> OnGetAsync()
    {
        var roles = await roleManager.Roles.ToListAsync();

        return Page();
    }
}

在MVC版本中,它将角色返回到视图。但对于Razor Pages版本,它应该返回什么,因为它具有模型绑定功能?

这里是一个工作演示:

Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Index";
}

<h1>List of Roles</h1>
<a asp-action="Create">Create</a>
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var role in Model.roles)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    <form asp-action="Delete" asp-route-id="@role.Id" method="post">
                        <button type="submit" class="btn btn-sm btn-danger">
                            Delete
                        </button>
                    </form>
                </td>
            </tr>

        }
    </tbody>
</table>
@page
@model IdentityRazor3_1.Pages.IndexModel
Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Index";
}

<h1>List of Roles</h1>
<a asp-action="Create">Create</a>
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var role in Model.roles)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    <form asp-action="Delete" asp-route-id="@role.Id" method="post">
                        <button type="submit" class="btn btn-sm btn-danger">
                            Delete
                        </button>
                    </form>
                </td>
            </tr>

        }
    </tbody>
</table>
@page
@model IdentityRazor3_1.Pages.IndexModel
如果不希望每次都指定相同的命名空间,可以将以下代码添加到_ViewImports.cshtml中:

或:


下面是一个工作演示:

Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Index";
}

<h1>List of Roles</h1>
<a asp-action="Create">Create</a>
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var role in Model.roles)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    <form asp-action="Delete" asp-route-id="@role.Id" method="post">
                        <button type="submit" class="btn btn-sm btn-danger">
                            Delete
                        </button>
                    </form>
                </td>
            </tr>

        }
    </tbody>
</table>
@page
@model IdentityRazor3_1.Pages.IndexModel
Index.cshtml:

@page
@model IndexModel
@{
    ViewData["Title"] = "Index";
}

<h1>List of Roles</h1>
<a asp-action="Create">Create</a>
<table class="table table-striped table-bordered">
    <thead>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @foreach (var role in Model.roles)
        {
            <tr>
                <td>@role.Id</td>
                <td>@role.Name</td>
                <td>
                    <form asp-action="Delete" asp-route-id="@role.Id" method="post">
                        <button type="submit" class="btn btn-sm btn-danger">
                            Delete
                        </button>
                    </form>
                </td>
            </tr>

        }
    </tbody>
</table>
@page
@model IdentityRazor3_1.Pages.IndexModel
如果不希望每次都指定相同的命名空间,可以将以下代码添加到_ViewImports.cshtml中:

或:


我试过你的密码。只是@model IndexModel出现语法错误,表示找不到类型或名称空间名称“IndexModel”。是否缺少using指令或程序集引用?请检查IndexModel的名称空间。并向其添加引用。确保已创建正确的razor pages项目。请参阅。检查我的更新答案。我尝试了密码只是@model IndexModel出现语法错误,表示找不到类型或名称空间名称“IndexModel”。是否缺少using指令或程序集引用?请检查IndexModel的名称空间。并向其添加引用。确保已创建正确的razor pages项目。请参阅。检查我的更新答案。