MVC视图中DropDownListFor使用出错,请求排查修正
代码错误分析与修正
Controller层问题与修正
存在的错误
Cars集合中第三个对象的属性名是ID(大写),与前两个的Id(小写)不一致,会导致后续模型绑定或数据读取异常- 初始化
MyModel时,Cars = cars后多了分号,C#对象初始化器中属性赋值应使用逗号分隔(或末尾无标点) return View(vm)前的...是无效语法,需移除
修正后的Controller代码
public IActionResult Show() { var cars = new List<Cars>() { new Cars {Name = "BMW", Id = 1}, new Cars {Name = "KIA", Id= 2}, new Cars {Name = "FORD", Id = 3}, // 统一属性名为Id(小写) }; var vm = new MyModel { Cars = cars // 移除多余分号 }; return View(vm); // 移除无效的... }
同时需要确保MyModel和Cars类的定义正确:
public class MyModel { // 存储所有车辆选项 public List<Cars> Cars { get; set; } // 存储选中的车辆ID(用于绑定下拉框选中值) public int SelectedCarId { get; set; } } public class Cars { public int Id { get; set; } public string Name { get; set; } }
视图层问题与修正
存在的错误
@model MyModel后多了分号,Razor语法中声明模型不需要加分号DropDownListFor的第一个参数绑定了Model.Cars集合,下拉框需要绑定单个属性(用于保存选中值),而非集合本身SelectList的构造参数错误:数据源应为Model.Cars,而非不存在的Name;参数顺序应为(数据源, 值字段名, 文本字段名),这里值字段是Id,文本字段是Name,而非写反的"Name"和"Text"- HTML标签闭合错误:
/div应为</div>,最外层<div>未闭合
修正后的视图代码
@model MyModel <div> <!-- 其他内容 --> <div class="col-md-5"> @Html.DropDownListFor(x => x.SelectedCarId, new SelectList(Model.Cars, "Id", "Name"), "请选择车辆", htmlAttributes: new { @class = "form-control" }) </div> </div>
代码说明
x => x.SelectedCarId:绑定到MyModel中的SelectedCarId属性,用于保存用户选中的车辆IDnew SelectList(Model.Cars, "Id", "Name"):以Model.Cars为数据源,将Id作为下拉选项的value值,Name作为显示的文本"请选择车辆":设置下拉框的默认提示选项(可选)
内容的提问来源于stack exchange,提问作者4est
相关产品推荐
相关产品推荐

