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

Blazor中如何创建优质的自定义DropDownList/ComboBox项

问题1:直接传递类对象作为option值的实现方法

原生HTML的<option>标签的value属性仅支持字符串类型,无法直接存储C#类对象,你可以使用Blazor内置的InputSelect组件省略手动转换、查询的流程,.NET 5及以上版本的InputSelect原生支持复杂类型绑定,无需手动处理ID转换和列表查询。
示例代码如下:

@page "/dropdownlist"
<h3>DropDownList - ComboBox</h3>

<!-- 直接绑定SelectedTestModel对象,不需要手动处理值转换 -->
<InputSelect class="form-control col-6" @bind-Value="SelectedTestModel">
    <option disabled value="">--SelectName--</option>
    @foreach (var test in TestModelsLst)
    {
        <!-- 直接把test对象赋值给value -->
        <option value="@test">@test.Name</option>
    }
</InputSelect>

@if (SelectedTestModel != null)
{
    <p>Sel TestModel-Obj.Name: @SelectedTestModel.Name</p>
}

@code {
    public TestModel SelectedTestModel;

    // 不需要再写OnSelChange方法手动查询对象

    public List<TestModel> TestModelsLst = new List<TestModel>
    {
        new TestModel("Jonny"),
        new TestModel("Sarah"),
        new TestModel("Tom")
    };

    public class TestModel
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public TestModel(string name)
        {
            Id = Guid.NewGuid();
            Name = name;
        }
        // 可选:重写ToString方法自定义选项显示逻辑,不需要就可以去掉
        public override string ToString() => Name;
    }
}

问题2:实现不可选中的占位提示

你只需要给默认的占位选项加上disabled属性,就可以禁止用户选中该选项,如果你希望用户点开下拉列表后看不到这个占位项,可以额外加hidden属性:

<!-- 仅禁止选中,点开下拉仍能看到该选项 -->
<option value="" disabled selected>--SelectName--</option>

<!-- 禁止选中,且点开下拉后看不到该选项 -->
<option value="" disabled selected hidden>--SelectName--</option>

这个写法对原生<select>和InputSelect组件都生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:24:03