在C#(Blazor WebAssembly)中更新用户后分配IdentityRole 问题
我有一个Blazor WebAssembly项目,具有标识。我扩展了IdentityUser表并添加了一个在C#(Blazor WebAssembly)中更新用户后分配IdentityRole 问题,c#,asp.net-core,asynchronous,blazor,C#,Asp.net Core,Asynchronous,Blazor,我有一个Blazor WebAssembly项目,具有标识。我扩展了IdentityUser表并添加了一个组列。我有一个等待列表页面,其中列出了没有任何组的所有用户。将新组分配给用户时,我会调用RolesController,将角色添加到与其组同名的用户。问题是当调用RoleController时,用户传递的对象仍然并没有组 代码 WaitingList.razor: @if (waitingUsers == null) { <p> Loading </p> }
组列。我有一个等待列表页面,其中列出了没有任何组的所有用户。将新组分配给用户时,我会调用RolesController
,将角色添加到与其组同名的用户。问题是当调用RoleController时,用户传递的对象仍然并没有组
代码
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!");
}
}
@if(waitingUsers==null)
{
装载
}
其他的
{
foreach(等待用户中的AspNetUsers用户)
{
isim:@user.FirstName@user.lasname
---请选择一个组---
@foreach(组中的var组)
{
@if(group.Id==groupId)
{
@group.GroupName
}
其他的
{
@group.GroupName
}
}
}
@如果(waitingUsers.Length>0)
{
更新
}
}
@代码{
AspNetUsers[]等待用户;
public int groupId=0;
私有列表组=新列表();
受保护的重写异步任务OnInitializedAsync()
{
waitingUsers=wait http.GetFromJsonAsync(“api/AspNetUsers/noGroup”);
groups=wait http.GetFromJsonAsync(“api/groups”);
}
异步任务更新(AspNetUsers[]用户)
{
foreach(用户中的AspNetUsers用户)
{
/*
在第一个版本中,Put方法如下所示:
等待http.PutAsJsonAsync($“api/AspNetUsers/newGroup/{user.Id}”,user);
*/
http.PutAsJsonAsync($“api/AspNetUsers/newGroup/{user.Id}”,user.Wait();
//到角色控制器的路线
等待http.PostAsJsonAsync(“AddNewRole”,用户);
等待js.InvokeVoidAsync(“警报”,“更新成功!”);
}
}
如何确保首先分配的用户组?等待方法不起作用。主要错误是
onclick=“@Update(waitingUsers)”
应该是@onclick=“@(e=>Update(waitingUsers)”
这里有一个工作示例:
@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)
{
}
}
}
@page/“
@foreach(等待用户中的AspNetUsers用户)
{
isim:@user.FirstName@user.lasname
---请选择一个组---
@foreach(组中的var组)
{
@if(group.Id==groupId)
{
@group.GroupName
}
其他的
{
@group.GroupName
}
}
}
@如果(waitingUsers.Count>0)
{
更新
}
@foreach(waitingUsers中的var项)
{
- @item.FirstName group:@item.group
}
@代码{
类AspNetUsers
{
公共字符串名{get;set;}
公共字符串姓氏{get;set;}
公共字符串组{get;set;}
}
班级
{
公共int Id{get;set;}
公共字符串组名{get;set;}
}
List waitingUsers=新列表();
public int groupId=0;
私有列表组=新列表();
受保护的重写异步任务OnInitializedAsync()
{
waitingUsers=新列表();
Add(新的AspNetUsers{FirstName=“johndoe”});
Add(新的AspNetUsers{FirstName=“Test”});
Add(新的AspNetUsers{FirstName=“Mark Jack”});
组=新列表();
添加(新组{Id=1,GroupName=“group1”});
添加(新组{Id=2,GroupName=“group2”});
添加(新组{Id=3,GroupName=“group3”});
}
异步无效更新(MouseEventArgs e)
{
foreach(等待用户中的AspNetUsers用户)
{
}
}
}