创建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个值添加到下拉列表中,但所有值都显示为:
- 输出屏幕截图
然而,当我使用第二种方法时,它工作得很好。我希望使用第一种方法,因为我希望能够指定每个项目的文本和值。
5条答案
按热度按时间2ul0zpep1#
问题在于
SelectList(IEnumerable)
constructor doesn't acceptSelectListItem
's(至少没有作为SelectListItem
添加到它的Items
集合中).它只是接受一些任意对象的集合,这些对象将用于生成完全不相关的内部SelectListItem
集合。如果需要,可以按以下方式使用
SelectList(IEnumerable, string, string)
构造函数:这是可行的,但是不必要,因为你创建了复杂的
SelectListItem
项,而SelectList
不会使用这些项--它只会把它们当作任何其他数据对象。同样的,你也可以用其他更简单的类来代替
SelectListItem
:gstyhher2#
使用DropDownList并将其命名为与模型属性名称相同的名称。我的名称是"ItemType"
x一个一个一个一个x一个一个二个x
mo49yndu3#
您可以更改您的代码
到
它会正确显示省份。
syqv5f0l4#
您不需要使用
SelectList
。相反,将
List<SelectListItem>
Province放入ViewBag并返回ViewBag。然后在视图中放入:n3h0vuf25#
考虑到关于这个主题的视图的数量,我认为它可能有助于其他人提供一些进一步的示例,说明您选择的选项取决于选择列表的所需内容。
我通常更喜欢在一个单独的类中保留选择下拉选项的分配,这样在创建更长的列表时更容易管理,在整个应用程序中使用同一类的选项也很方便。
C#类
示例HTML代码:
页面上的所有三个选择下拉列表:
例一:
例二:
例三:
例3是一个困扰了我一段时间,我不知道如何创建一个选择选项列表,以及添加一些其他定制的选项在同一时间.如果我需要添加一些更多的额外besoke选项,那么我会简单地添加他们在我需要的任何顺序,无论是循环之前,之后或在多个循环之间.