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

ASP.NET MVC中如何获取DropDownList选中项的Description字段值

默认的SelectList只会存储选项的value(对应Id)和显示文本(对应Name),不会自动携带Description字段,你可以用下面两种常用方案实现:

方案1:给下拉选项添加自定义属性存Description

自己手动渲染下拉框,给每个<option>新增data-description自定义属性存储对应项目的描述:

<select id="Id" name="Id" class="form-control">
    <option value="">-- Select --</option>
    @foreach(var project in Model.Projects)
    {
        <option value="@project.Id" 
                data-description="@project.Description"
                @(Model.Id == project.Id ? "selected" : "")>
            @project.Name
        </option>
    }
</select>

之后JS里直接读取选中项的data-description属性即可,注意修正原代码选择器的大小写错误:

$(function () {
    $('#Id').change(function () {
        var selectedOption = $('#Id :selected');
        alert('id = ' + $('#Id').val() + ', name = ' + selectedOption.text() + ', description = ' + selectedOption.data('description'));
    });
});

方案2:前端预存全量项目数据匹配

如果不想修改原有下拉框的渲染逻辑,可以先把所有项目数据序列化到前端JS变量中,选中时根据Id匹配对应的Description:
首先在Razor页面中添加如下代码,把项目列表注入到JS全局变量:

<script>
    // 如果项目用Newtonsoft.Json可替换为@Html.Raw(JsonConvert.SerializeObject(Model.Projects))
    var allProjects = @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Model.Projects));
</script>

之后修改你的JS逻辑:

$(function () {
    $('#Id').change(function () {
        var selectedId = Number($('#Id').val());
        var description = '';
        if(selectedId){
            var matchProject = allProjects.find(p => p.Id === selectedId);
            description = matchProject ? matchProject.Description : '';
        }
        alert('id = ' + selectedId + ', name = ' + $('#Id :selected').text() + ', description = ' + description);
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:05