在C#(Blazor WebAssembly)中更新用户后分配IdentityRole 问题

在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> }

我有一个Blazor WebAssembly项目,具有标识。我扩展了IdentityUser表并添加了一个
列。我有一个等待列表页面,其中列出了没有任何组的所有用户。将新组分配给用户时,我会调用
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用户) { } } }