gpt4 book ai didi

c# - 手动将 SelectListItem 添加到 SelectList 以在 DropDownListFor 中使用

转载 作者:太空狗 更新时间:2023-10-29 18:02:17 26 4
gpt4 key购买 nike

当我创建一个 SelecList 时,我希望能够手动添加 SelecListItem 并为此使用以下代码:

List<SelectListItem> Provinces = new List<SelectListItem>();
Provinces.Add(new SelectListItem() { Text = "Northern Cape", Value = "NC" });
Provinces.Add(new SelectListItem() { Text = "Free State", Value = "FS" });
Provinces.Add(new SelectListItem() { Text = "Western Cape", Value = "WC" });

SelectList lstProvinces = new SelectList(Provinces);

而不是这个:

var lstProvinces = new SelectList(new[] { "Northern Cape", "Free State", "Western Cape" });

创建 SelectList 后,我​​通过 ViewBag 将其传递给 DropDownListFor:

Html.DropDownListFor(m => m.StartPointProvince, (SelectList)ViewBag.Provinces)

但是,当我使用第一种方法创建 SelectList 时,它不起作用 - 它将 3 个值添加到下拉列表中,但所有值都显示为: Code*输出截图

但是当我使用第二种方法时,它工作正常。我希望使用第一种方法,因为我希望能够指定每个项目的文本和值。

最佳答案

问题是 SelectList(IEnumerable) constructor doesn't accept SelectListItem's (至少不能作为 SelectListItem 添加到其 Items 集合中)。它只接受一些任意对象的集合,这些对象将用于生成完全不相关的内部 SelectListItem 集合。

如果需要,可以使用 SelectList(IEnumerable, string, string)以这种方式构造函数:

List<SelectListItem> Provinces = new List<SelectListItem>();
Provinces.Add(new SelectListItem() { Text = "Northern Cape", Value = "NC" });
Provinces.Add(new SelectListItem() { Text = "Free State", Value = "FS" });
Provinces.Add(new SelectListItem() { Text = "Western Cape", Value = "WC" });

this.ViewBag.Provinces = new SelectList(Provinces, "Value", "Text");

它会起作用的。但它是不必要的,因为您创建了复杂的 SelectListItem 项,SelectList 不会使用这些项 - 它只会将它们视为任何其他项数据对象。

以同样的方式,您可以使用其他一些更简单的类来代替 SelectListItem:

public class SelectListModel
{
public String Text { get; set; }
public String Value { get; set; }
}

...
Provinces.Add(new SelectListModel() { Text = "Northern Cape", Value = "NC" });

关于c# - 手动将 SelectListItem 添加到 SelectList 以在 DropDownListFor 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29869508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com