【问题标题】:Remove function removes table value from DB but not from HTML Table In BLAZOR删除函数从数据库中删除表值,但不从 BLAZOR 中的 HTML 表中删除
【发布时间】:2021-09-29 20:42:08
【问题描述】:

我的 blazor 应用程序中有这个显示公司列表的 html 表。现在,当我想删除特定行时,我单击删除图标。我注意到删除函数正在从数据库中删除行值,而不是从视图中删除。请检查我的代码,如果我错过了什么,请告诉我。

代码:

            <table>
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>Company Name</th>
                        <th>Delete</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (var Result in lstCompanies)
                    {
                    <tr>
                        <td>@Result.id</td>
                        <td>@Result.companyName</td>
                        <td>
                            <button @onclick="() => RemoveCompanyFromList(Result)">
                                <i class="fa fa-trash-o fa-lg"></i>
                            </button>
                        </td>
                    </tr>
                    }
                </tbody>
            </table>

onclick 删除功能代码:

   [Parameter]
    public EventCallback<List<Models.UTP>> ItemUpdated { get; set; }
        private void RemoveCompanyFromList(Models.UTP utpResult)
        {
            string utpidResult = utpResult.utpid;
            try
            {
                Http.PutAsJsonAsync($"api/Users/company/remove/{utpidResult}", utpidResult);
                ItemUpdated.InvokeAsync(lstCompanies);
                StateHasChanged();
            }
            catch (Exception ex)
            {
                string exMsg = ex.Message;
            }
        }

【问题讨论】:

  • 确保您也从 lstCompanies 中删除该项目。如果您从代码 sn-p 执行此操作并不明显
  • 也许我应该从 lstCompanies 中删除并重新启动表格显示吧?
  • 您不需要重新初始化表。当您调用 StateHasChanged() 时,它将自动刷新。只需确保从 lstCompanies 中删除该项目
  • 添加了这个 lstCompanies.Remove(utpResult);在状态改变之前..但不起作用
  • 我认为这是嵌入在页面中的组件。您是否在捕获 ItemUpdated.InvokeAsync( )?如果是,那么也可以将 StateHasChanged() 放入该事件处理程序中

标签: c# html blazor blazor-webassembly


【解决方案1】:

只需确保该项目已从 lstCompanies 中删除即可。

// make it async
private async Task RemoveCompanyFromList(Models.UTP utpResult)
{ 
    await Http.PutAsJsonAsync(
           $"api/Users/company/remove/{utpidResult}", 
           utpidResult);
    lstCompanies.Remove(utpidResult);     // add this
    ItemUpdated.InvokeAsync(lstCompanies);
    StateHasChanged();
}

或者,从后备存储(数据库)重新获取列表。

【讨论】:

  • 是的,添加删除并且它有效。大部分都有清晰的浏览器缓存..非常感谢。
猜你喜欢
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多