【问题标题】:Assigning IdentityRole just after updating the user in C# (Blazor WebAssembly)在 C# (Blazor WebAssembly) 中更新用户后立即分配 IdentityRole
【发布时间】:2020-12-24 22:24:35
【问题描述】:

问题

我有一个带有 Identity 的 Blazor WebAssembly 项目。我扩展了 IdentityUser 表并添加了一个 Group 列。我有一个等待列表页面,其中列出了没有任何组的所有用户。在为用户分配新组时,我然后调用RolesController 为用户添加与组同名的角色。问题是当 RolesController 被调用时,传递的用户对象仍然没有组。

代码

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!");
        }
    }

如何确保首先分配用户组?等待方法没有成功。

【问题讨论】:

    标签: c# asp.net-core asynchronous blazor


    【解决方案1】:

    主要的错误是

    onclick="@Update(waitingUsers)"

    应该是@onclick="@(e =&gt; 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)
            {
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2023-04-03
      • 2020-09-12
      • 2021-06-28
      • 2020-12-13
      • 2020-07-18
      • 2021-10-24
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多