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

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属性,用于保存用户选中的车辆ID
  • new SelectList(Model.Cars, "Id", "Name"):以Model.Cars为数据源,将Id作为下拉选项的value值,Name作为显示的文本
  • "请选择车辆":设置下拉框的默认提示选项(可选)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:43:23