I Created an app by following the .net core documentation ( Create an ASP.NET Core app with user data protected by authorization ).
Everything worked fine for me. but i want to add the registered users to a role like admin and manager and removing from roles also where i can get the list of users and assign them to a role by selecting checkbox. I also want to remove the users like the same way.
I tried a method from MVC core but it didn't work out for returning a view() method.
In Razor Pages i can't find an alternative way of return View(model); method. return Page(); is not working in razor 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();
}
In Razor Pages i can't find an alternative way of return View(model); method. return Page(); is not working in razor page.
In ASP.Net Core Razor Page,you could use BindProperty
as an alternative way of return(model)
.
Here is a simple demo like below:
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.Result:
Reference:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.0#targets
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.