ASP.NET中使用Ajax填充DropDownListFor后如何设置选中值?
解决Ajax填充DropDownListFor后设置选中值的问题
你的问题核心在于:服务器端生成DropDownListFor时,下拉列表是空的(new SelectList(string.Empty...)),此时设置的选中值(参数2)因为没有对应的<option>元素,完全不会生效。必须在Ajax异步加载完选项后,通过客户端JavaScript来设置选中状态。
具体解决方案步骤:
修正Ajax的拼写错误
你的Ajax代码里datatype应该是dataType(首字母大写T),这个错误可能导致JSON解析失败,先修正:$.ajax({ type: 'GET', url: '/GetListExams/Get_fLW_examsTB', dataType: 'json', // 修正拼写 success: function (data) { // 后续逻辑 } });保存目标选中值到页面
如果需要选中的值来自模型,先把它存到隐藏域里,方便JS读取:@* 用隐藏域存储需要选中的exam_id *@ @Html.HiddenFor(m => m.FirstOrDefault()?.fLW_sch_exam_2.exam_id, new { id = "targetExamId" })在Ajax成功回调中设置选中值
加载完所有下拉选项后,通过JS设置选中状态,同时建议先清空原有选项(避免重复加载):$.ajax({ type: 'GET', url: '/GetListExams/Get_fLW_examsTB', dataType: 'json', success: function (data) { // 清空默认提示项之外的所有选项 $('#drExamsDate option:not(:first)').remove(); // 遍历数据添加选项 $.each(data, function (index, value) { $('#drExamsDate').append(`<option value="${value.examid}">${value.shortname}</option>`); }); // 获取目标选中ID并设置 var targetId = $('#targetExamId').val(); if (targetId) { $('#drExamsDate').val(targetId); } } });
额外说明:
- 如果不需要从模型取选中值,直接在JS里写死ID(比如你原来的
2),可以直接替换成$('#drExamsDate').val(2);。 - 服务器端的
DropDownListFor中,new SelectList(string.Empty, "Value", "Text", 2)这个选中设置完全无效,因为初始化时没有任何选项,建议去掉第四个参数,避免混淆:@Html.DropDownListFor(m => m.FirstOrDefault().fLW_sch_exam_2.exam_id, new SelectList(Enumerable.Empty<SelectListItem>()), "---اختر يوم الاختبار---", new { id = "drExamsDate", @class = "fw-bold form-control" })
内容的提问来源于stack exchange,提问作者Abdullah Al-Mohammadi
相关产品推荐
相关产品推荐

