SelectList 问题(选择值)

SelectList issue (Selected value)

我在模态 Bootstrap (5) 中有几个 DDL,并且那些 DDL 与来自控制器的 Viewbag 绑定,像这样:

(控制器)

ViewBag.StateID = new SelectList(db.State, "StateID", "StateDesc", events.StateID);
ViewBag.CountryID = new SelectList(db.Country, "CountryID", "CountryDesc",events.CountryID);
ViewBag.HotelID = new SelectList(db.Hotel, "HotelID", "HotelDesc", events.HotelID);
ViewBag.AirportID = new SelectList(db.Airport, "AirportID", "AirportDesc", events.AirportID);
ViewBag.AirlineID = new SelectList(db.Airline, "AirlineID ", "AirlineDesc", events.AirlineID);

如果我的代码声明是这样的话,我的视图工作得很好并填充 DDL 并显示 selected 项目:

(查看)

@Html.DropDownList("AirlineID", String.Empty)

(Javascript)

<script type="text/javascript">
    $('#AirlineID').attr('class', 'chosen-select form-control required');
    $('#AirportID').attr('class', 'chosen-select form-control required');
    $('#StateID').attr('class', 'chosen-select form-control required');
    $('#CountryID').attr('class', 'chosen-select form-control required');
    $('#HotelID').attr('class', 'chosen-select form-control required');
</script>

但是,如果我的代码是通过这种方式声明的,则所选项目不会出现或显示:

@Html.DropDownList("AirportID", (IEnumerable<SelectListItem>)ViewBag.AirportID, String.Empty, new { @class = "chosen-select form-control required" })

我用的是chosen-selectclass

这是为什么?缺少声明或代码?密码错误?

谢谢你

您不能为您绑定的 属性 和 SelectList

使用相同的名称
@Html.DropDownList("CountryID", (IEnumerable<SelectListItem>)ViewBag.CountryID, ...)

意味着您绑定到名为 CountryID 的 属性 但在您的情况下,CountryIDSelectList 而不是值类型(并且 <select>元素只能绑定到值类型。

该方法在内部生成 <option> 元素的集合并设置 value 属性和文本。这样做时,它会检查您绑定到的 属性 的值。如果 属性 的值与选项的值匹配,则呈现 selected="selected" 属性。在您的情况下,CountryID 不是 int 值,它与您在选项中生成的 StateID 值之一相匹配,因此 selected="selected" 永远不会设置在任何选项上,因为 CountryID"System.Web.Mvc.SelectList"(不是 "1""2" 等)

当您绑定到 属性.

时,设置 SelectList 构造函数的最后一个参数将被忽略

您可以通过将 null 指定为第二个参数来完成这项工作,这意味着帮助程序回退到使用 SelectList 作为第一个参数。

@Html.DropDownList("CountryID", null, String.Empty, new { @class = "chosen-select form-control required" })

但是推荐的方法是使用视图模型,例如

public class MyViewModel
{
  [Display(Name = "Country")]
  [Required(ErrorMessage = "Please select a country")]
  public int CountryID { get; set; }
  public SelectList CountryList { get; set; }
}

然后在 GET 方法中,初始化实例或视图模型,将数据模型属性映射到它并分配 SelectList 属性。然后在视图中,使用强类型 html 助手绑定到您的模型属性。

@Html.LabelFor(m => m.CountryID)
@Html.DropDownListFor(m => m.CountryID, Model.CountryList, "-Please select-", new { @class="..." })
@Html.ValidationMessageFor(m => m.CountryID)