c# - Blazor 服务器组件在状态更改后不刷新
问题描述
我正在根据一些 ifs 在另一个组件中渲染一个组件,逻辑是有客户端并且它们有链接的客户端,如果有任何链接的客户端,则显示一个下拉列表,如果用户从下拉列表中选择任何链接的客户端,链接的客户端数据将在同一组件中并排显示。
但问题是它在我选择链接客户端时第一次工作,如果我选择另一个,组件不会刷新,如果我将其更改为 0,那么它会再次刷新并只显示客户端数据,然后如果我再次从 0 更改它再次工作。
下面是我的代码。
@if (LinkedClients?.Count() > 0)
{
<select class="form-control input-width-auto bg-white" @onchange="e => ChangeLinkedClient(e)">
<option value="0">Select Linked Account</option>
@foreach (var item in LinkedClients)
{
<option value="@item.LinkedClient.Id">@item.LinkedClient.Name</option>
}
</select>
}
<div class="row mt-3">
<div class="@((SelectedLinkedClient != 0)? "col-md-6" : "col-md-12")">
<MyProject.ComponentLibrary.Profile.ProfilePrimaryDetailsComponent ClientId="ClientId" GoToNextEvent="GoToNext" LoadProfileProgress="DoNothing"></MyProject.ComponentLibrary.Profile.ProfilePrimaryDetailsComponent>
</div>
<div class="col-md-6">
@if (SelectedLinkedClient != 0)
{
<MyProject.ComponentLibrary.Profile.ProfilePrimaryDetailsComponent ClientId="SelectedLinkedClient" GoToNextEvent="GoToNext" LoadProfileProgress="DoNothing"></MyProject.ComponentLibrary.Profile.ProfilePrimaryDetailsComponent>
}
</div>
</div>
更改方法代码
public void ChangeLinkedClient(Microsoft.AspNetCore.Components.ChangeEventArgs e)
{
SelectedLinkedClient = Convert.ToInt32(e.Value.ToString());
StateHasChanged();
}
我在视图内的 MVC Core 项目中呈现此组件。
解决方案
使用@key 控制元素和组件的保存:
<option value="@item.LinkedClient.Id" @key="@item">@item.LinkedClient.Name</option>
您还可以使用@key 在对象未更改时保留元素或组件子树
推荐阅读
- php - 在 Laravel 中配置邮件驱动程序(使用 MAMP)
- reactjs - hot-module-loader 冷应用到 node_module 包
- php - 无法上传 wmv、mpg 和 asf 文件
- javascript - JSP从后端获取对象并在JS中操作
- python - Python Shell或Bash:如何在文件中多次递减字符串中的数字
- javascript - Express 应用程序中的 UnhandledPromiseRejectionWarning
- metal - 使用两个输入实现 CoreML 自定义层
- c# - 导航回 Visual Studio for Mac 中的最后一个光标位置
- java - 如何在 REST API 的同一个 POJO 中解析请求参数(查询和路径参数)和请求正文
- android - 无法解析方法 .into