[英]Assigning IdentityRole just after updating the user in C# (Blazor WebAssembly)
I have a Blazor WebAssembly project with Identity.我有一个带有身份的 Blazor WebAssembly 项目。 I extended IdentityUser table and added a Group
column.我扩展了 IdentityUser 表并添加了一个Group
列。 I have a waiting list page where I list all the users without any group.我有一个等待列表页面,我在其中列出了没有任何组的所有用户。 When assigning a new group to user, I then call RolesController
to add role to user with a same name as their group.当为用户分配一个新组时,我然后调用RolesController
向与他们的组同名的用户添加角色。 Problem is when RolesController called, passed object of user has still no group.问题是当 RolesController 调用时,用户传递的对象仍然没有组。
WaitingList.razor: WaitingList.razor:
@if (waitingUsers == null)
{
<p> Loading </p>
}
else
{
foreach (AspNetUsers user in waitingUsers)
{
<div class="container">
<div class="row justify-content-start">
<p> isim: @user.FirstName @user.SurName</p>
<select class="form-control"
@bind="user.Group">
<option value="0">---Please select a group---</option>
@foreach (var group in groups)
{
@if (group.Id == groupId)
{
<option selected value="@group.Id"> @group.GroupName </option>
}
else
{
<option value="@group.Id"> @group.GroupName </option>
}
}
</select>
</div>
</div>
}
@if (waitingUsers.Length > 0)
{
<button onclick="@Update(waitingUsers)"> Update </button>
}
}
@code {
AspNetUsers[] waitingUsers;
public int groupId = 0;
private List<Groups> groups = new List<Groups>();
protected override async Task OnInitializedAsync()
{
waitingUsers = await http.GetFromJsonAsync<AspNetUsers[]>("api/AspNetUsers/noGroup");
groups = await http.GetFromJsonAsync<List<Groups>>("api/groups");
}
async Task Update(AspNetUsers[] users)
{
foreach (AspNetUsers user in users)
{
/*
at first version Put method was like this:
await http.PutAsJsonAsync($"api/AspNetUsers/newGroup/{user.Id}", user);
*/
http.PutAsJsonAsync($"api/AspNetUsers/newGroup/{user.Id}", user).Wait();
// route to RolesController
await http.PostAsJsonAsync<AspNetUsers>("AddNewRole", user);
await js.InvokeVoidAsync("alert", $"Updated Successfully!");
}
}
How can I make sure users' groups assigned first?如何确保首先分配用户组? Wait method didn't worked out.等待方法没有奏效。
The main bug is with主要错误是
onclick="@Update(waitingUsers)"
should be @onclick="@(e => Update(waitingUsers)"
应该是@onclick="@(e => Update(waitingUsers)"
Here you have a working example:这里有一个工作示例:
@page "/"
@foreach (AspNetUsers user in waitingUsers)
{
<div class="container">
<div class="row justify-content-start">
<p> isim: @user.FirstName @user.SurName</p>
<select class="form-control"
@bind="user.Group">
<option value="0">---Please select a group---</option>
@foreach (var group in groups)
{
@if (group.Id == groupId)
{
<option selected value="@group.Id.ToString()"> @group.GroupName </option>
}
else
{
<option value="@group.Id.ToString()"> @group.GroupName </option>
}
}
</select>
</div>
</div>
}
@if (waitingUsers.Count > 0)
{
<button @onclick="Update"> Update </button>
}
<br />
<ul class="list-group">
@foreach (var item in waitingUsers)
{
<li class="list-group-item">@item.FirstName Group: @item.Group</li>
}
</ul>
@code {
class AspNetUsers
{
public string FirstName { get; set; }
public string SurName { get; set; }
public string Group { get; set; }
}
class Groups
{
public int Id { get; set; }
public string GroupName { get; set; }
}
List<AspNetUsers> waitingUsers = new List<AspNetUsers>();
public int groupId = 0;
private List<Groups> groups = new List<Groups>();
protected override async Task OnInitializedAsync()
{
waitingUsers = new List<AspNetUsers>();
waitingUsers.Add(new AspNetUsers { FirstName = "John Doe" });
waitingUsers.Add(new AspNetUsers { FirstName = "Test Test" });
waitingUsers.Add(new AspNetUsers { FirstName = "Mark Jack" });
groups = new List<Groups>();
groups.Add(new Groups { Id = 1, GroupName = "Group 1" });
groups.Add(new Groups { Id = 2, GroupName = "Group 2" });
groups.Add(new Groups { Id = 3, GroupName = "Group 3" });
}
async void Update(MouseEventArgs e)
{
foreach (AspNetUsers user in waitingUsers)
{
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.