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
的 属性 但在您的情况下,CountryID
是 SelectList
而不是值类型(并且 <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)
我在模态 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
的 属性 但在您的情况下,CountryID
是 SelectList
而不是值类型(并且 <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)