Blazor InputSelect绑定选中Category ID始终默认0问题
Blazor InputSelect绑定分类ID始终为0的解决办法
你的问题核心在于InputSelect绑定字段不在EditForm的Model跟踪范围内,同时初始值与选项不匹配也会导致绑定失效。以下是具体解决办法:
方案一:直接绑定到SegmentModel的CategoryId(推荐)
将InputSelect的绑定目标改为segment.CategoryId,让它属于EditForm的Model范畴,表单状态跟踪会更可靠:
修改InputSelect代码:
<InputSelect @bind-Value="segment.CategoryId"> <option value="0">请选择分类</option> <!-- 添加默认选项,匹配初始值0 --> @foreach (var category in Categories) { <option value="@category.Id">@category.Name</option> } </InputSelect>
同时简化后台代码,删除冗余的独立字段和方法:
// 删除以下冗余代码 public int SelectedCategoryId { get; set; } private void HandleCategorySelection(ChangeEventArgs args){...} // 简化提交方法 private async Task HandleSubmit() { await manager._segmentRepository.AddSegmentAsync(segment); }
方案二:保留独立字段的绑定修正
如果必须使用独立的SelectedCategoryId,需要修正绑定逻辑并匹配初始值:
- 添加对应初始值0的默认选项:
<InputSelect @bind-Value="SelectedCategoryId"> <option value="0">请选择分类</option> @foreach (var category in Categories) { <option value="@category.Id">@category.Name</option> } </InputSelect>
- 显式维护字段状态(避免自动属性的绑定异常):
private int _selectedCategoryId; public int SelectedCategoryId { get => _selectedCategoryId; set { if (_selectedCategoryId != value) { _selectedCategoryId = value; StateHasChanged(); // 手动触发UI更新 } } }
额外注意:移除EditForm的FormName="name"属性,该属性在当前场景下属于冗余配置,可能干扰表单绑定逻辑。
内容的提问来源于stack exchange,提问作者Dion
相关产品推荐
相关产品推荐

