为下拉列表提供占位符的模型有问题

Having problems with a model provided placeholder for dropdown

所以我有两个独立工作的案例。

如果我知道下拉列表中有模型数据,我会使用此代码。

        @Html.DropDownListFor(model => model.CarID, (SelectList)ViewBag.Cars, htmlAttributes: new { @class = "form-control" })

但是,如果 CarIDnull,那么问题来了,列表中的第一项将是下拉列表中的预选项。

在另一种形式中,我使用这个:

@Html.DropDownListFor(model => model.CarID, "--Select a Car--", (SelectList)ViewBag.Cars, htmlAttributes: new { @class = "form-control" })

我的控制器有这个来提供视图数据:

    ViewBag.Cars = new SelectList(db.Units, "CarID", "Name", model.CarID);

是否有其中一个我可以使用,只有在模型数据不存在时才会有占位符来填充位置?

在你的第二种方法中,你使用的辅助方法不正确,

应该是

@Html.DropDownListFor(model => model.CarID,(SelectList)ViewBag.Cars,
                                           "Select one", new { @class = "form-control" })

如果没有预先 selected(model.CarIDnull),这将呈现带有 "Select one" 选项的下拉列表作为第一个(和默认项) .如果Model.CarID有一个有效值,它将select相应的选项。

如果你绝对想在 Model.CarID 不为空时删除 "Select one",你可以写一些 javascript 在文档加载时执行(jQuery 文档就绪:) ) 检查 selected 选项并根据需要将其删除。