这引发了另一个问题,即在使用它的其他方法中什么是有效的
DropdownList vs DropdownListFor
这两种方法在使用上其实比较混乱,我会给出基本的例子
使用下面的代码
@Html.DropDownListFor(m => m.SelectedProductId, Model.ProductList, "- Please select -", new {@class="form-control"})
Model.ProductList 是一个 SelectList 项目,类似于 SelectList(products, "ID", "Name"),这意味着 ID 绑定到值,而名称绑定到文本。
下面的代码
@Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"})
Model.ProductList 也是一个 SelectList 项目,看起来像这样 SelectList(products, "ID", "Name") 与第一个几乎相同。
当您想将值放在下拉选择字段中时,上述两个代码都可以使用。
但是当你想预先选择一个已经选择的值时,这两个方法会发生变化
对于
@Html.DropDownListFor(m => m.SelectedProductId, Model.ProductList, "- Please select -", new {@class="form-control"})
因为它是与模型绑定的强类型,所以不需要像SelectList(products, "ID", "Name", "Selected Value")那样包含选定的值,绑定应该足够了,这可能是您遇到的问题
对于
@Html.DropDownList("SelectedProductId", Model.ProductList, "- Please select -", new {@class="form-control"})
因为不是强绑定,所以需要在SelecteList中包含选中的值。
注意
使用DropdownList 而不在选择列表中包含所选值也可以,但字符串名称必须与模型参数相同文本大小写无关 例如m => m.Sex 和"Sex" 或 "sex"
所以我的拙见建议或意见是使用
@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.TitleList, "Value", "Text"), "-- Select Title--", new {@class = "form-control"})