我通过遵循.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();
}
在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。结果:
参考:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.0#targets