C#中如何将字典Value绑定为下拉框的Key值?
解决下拉框Key/Value统一为学生名称的问题
控制器代码修改
你只需要调整SelectList的创建逻辑,把Value字段和显示文本字段都指定为学生名称即可,有两种实现方式:
方案1(推荐:无需转字典,更简洁)
// 直接基于学生名称集合创建SelectList,Value和Text都绑定Name属性 var GetStudentName = new SelectList(_wOService.GetName(), "Name", "Name"); ViewBag.GetStudentName = GetStudentName;
方案2(保留字典转换逻辑)
如果你坚持要通过字典中转,只需把字典的Key和Value都设为学生名称:
var GetStudentName = new SelectList(_wOService.GetName() .ToDictionary(us => us.Name, us => us.Name), "Key", "Value"); ViewBag.GetStudentName = GetStudentName;
原理说明
原来的代码中,你用us.ID作为字典Key(对应下拉框option的value属性),us.Name作为字典Value(对应option的显示文本)。修改后,不管是直接绑定集合还是通过字典,都让下拉框的value和显示文本统一为学生名称,这样提交表单时传递的就是名称,完全适配你的存储过程查询逻辑。
视图代码无需修改
你的CSHTML代码保持原样即可,asp-items会自动生成符合要求的下拉选项:
<select id="SearchName" name="SearchName" asp-items="@ViewBag.GetStudentName" disabled class="form-control GetStudentName"> <option value=""> Select </option> </select>
修改后生成的下拉选项结构如下:
<option value="XYZ">XYZ</option> <option value="PQR">PQR</option> <option value="ASD">ASD</option> <option value="ZXD">ZXD</option>
内容的提问来源于stack exchange,提问作者Veet Thomson
相关产品推荐
相关产品推荐

