You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,需要修正绑定逻辑并匹配初始值:

  1. 添加对应初始值0的默认选项:
<InputSelect @bind-Value="SelectedCategoryId">
    <option value="0">请选择分类</option>
    @foreach (var category in Categories)
    {
        <option value="@category.Id">@category.Name</option>
    }
</InputSelect>
  1. 显式维护字段状态(避免自动属性的绑定异常):
private int _selectedCategoryId;
public int SelectedCategoryId 
{ 
    get => _selectedCategoryId; 
    set 
    {
        if (_selectedCategoryId != value)
        {
            _selectedCategoryId = value;
            StateHasChanged(); // 手动触发UI更新
        }
    } 
}

额外注意:移除EditForm的FormName="name"属性,该属性在当前场景下属于冗余配置,可能干扰表单绑定逻辑。

内容的提问来源于stack exchange,提问作者Dion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:29:53