Blazor Server中循环渲染DevExpress DxTagBox绑定值重复问题求助
问题分析与解决方案
问题核心在于所有循环生成的DxTagBox组件都绑定到同一个RolesID_New集合变量,导致所有组件的选中值完全同步,任何一个组件的选择操作都会影响其他所有组件。
修改方案
需要为每个Role实例分配独立的选中值集合,通过字典维护每个Role对应的选中用户数据:
1. 替换绑定变量定义
在@code部分,将单一的RolesID_New替换为字典类型,键为Role的ID,值为对应该Role的选中用户ID集合(类型需与USR_NR匹配,以下假设USR_NR为int类型):
// 假设Role的ID类型为int,USR_NR类型为int Dictionary<int, IEnumerable<int>> RoleSelectedUsers { get; set; }
2. 初始化字典
在组件初始化方法中,为每个Role初始化对应的空选中集合:
protected override async Task OnInitializedAsync() { // 加载Roles数据(保留原有加载逻辑) Roles = await LoadRolesFromDatabase(); // 为每个Role初始化空的选中用户集合 RoleSelectedUsers = Roles.ToDictionary(role => role.ID, _ => Enumerable.Empty<int>()); }
3. 修改循环中的DxTagBox绑定
循环渲染时,每个DxTagBox绑定到字典中当前Role对应的条目:
@foreach(var inputRoles in Roles) { <div class="flRow"> <DxTagBox Data="@User" TextFieldName="@nameof(USER.USR_NAME)" ValueFieldName="@nameof(USER.USR_NR)" @bind-Values="@RoleSelectedUsers[inputRoles.ID]" NullText="@inputRoles.InfoCard_Roles" ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"> <DxListEditorColumn FieldName="@nameof(USER.VORNAME)" Caption="Vorname"/> <DxListEditorColumn FieldName="@nameof(USER.NAME)" Caption="Nachname"/> </DxTagBox> <p class="w-25">@inputRoles.RName</p> </div> }
4. 类型适配说明
如果USR_NR为其他类型(如string、Guid),只需将字典值的类型替换为对应类型即可。
修改后,每个DxTagBox组件会绑定到独立的选中值集合,彼此的选择操作不会互相干扰。
内容的提问来源于stack exchange,提问作者Stephan Mayer
相关产品推荐
相关产品推荐

