【问题标题】:Data Does Not Load In OnAfterRenderAsync() Blazor ServerOnAfterRenderAsync() Blazor 服务器中未加载数据
【发布时间】:2021-05-15 14:13:03
【问题描述】:

这里我有 blazor 服务器应用程序,我正在尝试删除角色,删除后我想再次加载角色列表并显示已删除的消息。

但问题是删除角色后会显示删除消息,但角色列表不会再次加载。

以下是我所做的

RoleList.razor

@foreach (var item in roleList)
 {
   <tr>
      <td>@item.Name</td>
      <td>
         <a href="/admin/editrole/@item.Id" class="btn btn-outline-primary"><i class="far fa-edit"></i> Edit</a>
         <button @onclick="()=>DeleteRole(item.Id)" class="btn btn-outline-danger"><i class="far fa-trash-alt"></i> Delete</button>
      </td>
   </tr>
 }

    protected async override Task OnAfterRenderAsync(bool firstRender)
    {
        await jSRuntime.InvokeAsync<string>("AddDataTables", new object[] { "#example" });
        if (MessageStaus.MessageId == 1)
        {
            toastService.ShowSuccess("Role successfully created");
            MessageStaus.MessageId = 0;
        }
        else if(MessageStaus.MessageId == 2)
        {
            toastService.ShowSuccess("Role successfully edited");
            MessageStaus.MessageId = 0;
        }
        else if(MessageStaus.MessageId == 3)
        {
            toastService.ShowSuccess("Role successfully deleted");
            roleList = mainService.GetAllRoles();
            StateHasChanged();
            MessageStaus.MessageId = 0;
        }          
        await base.OnAfterRenderAsync(firstRender);
    }

    protected override void OnInitialized()
    {
        roleList = mainService.GetAllRoles();
        base.OnInitialized();
    }

    public async Task DeleteRole(string roleId)
    {
        var role = await roleManager.FindByIdAsync(roleId);
        bool confirmed = await jSRuntime.InvokeAsync<bool>("confirm", "Are you sure?");
        if (confirmed)
        {
            var result = await roleManager.DeleteAsync(role);       
            if (result.Succeeded)
            {
                MessageStaus.MessageId = 3;
            }
        }
    }

【问题讨论】:

    标签: c# asp.net-core blazor


    【解决方案1】:

    您正在尝试在OnAfterRenderAsync 中重新加载roleList。该方法的名称应该有点放弃。 AFTERRENDER = 组件已经渲染,任何更改只有在组件重新渲染时才会进入 UI。

    将您的roleList 更新添加到DeleteRole。在DeleteRole 完成之前,组件不会重新渲染。

    public async Task DeleteRole(string roleId)
        {
            var role = await roleManager.FindByIdAsync(roleId);
            bool confirmed = await jSRuntime.InvokeAsync<bool>("confirm", "Are you sure?");
            if (confirmed)
            {
                var result = await roleManager.DeleteAsync(role);       
                if (result.Succeeded)
                {
                    MessageStaus.MessageId = 3;
                    // Added here to update roleList after it changes
                    roleList = mainService.GetAllRoles();
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多