我正在使用ASP.NET MVC3 我需要创建一个包含4个值的DropDownList:
将“不介意”作为选定项目。
这是我的代码:
public static IEnumerable<SelectListItem> ListAnimals()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "Don't mind", Value = "-1", Selected = true });
items.Add(new SelectListItem { Text = "0", Value = "0" });
items.Add(new SelectListItem { Text = "1", Value = "1" });
items.Add(new SelectListItem { Text = "2 or +", Value = "2" });
return items;
}
我在我的观点中这样使用它:
@Html.DropDownListFor(m => m.AnimalNumber, new SelectList(Animal.ListAnimals() , "Value", "Text"))
使用此代码,所选项目始终为“0”,而在我明确写入时应该是“不要介意”。
但
何时:items.Add(new SelectListItem { Text = "0", Value = "0" });
成为:items.Add(new SelectListItem { Text = "0", Value = "[Anything but 0]" });
它完美无缺,并且“不介意”被正确选择。
所以,我认为MVC会自动选择Value = "0"
的项目,尽管有关键字Selected
...我怎样才能覆盖它?我真的需要让Value = "0"
,我相信我们可以覆盖这种行为。
有人知道怎么做?
(顺便说一句,我知道我的问题is very close of this one但是这个帖子中给出的答案并不能让我满意。我不想用HTML编写我的DDL,因为我会松开我的价值和我的模型,并编写一个jQuery脚本来改变选定的值是“有点hacky”。)
有任何正确的方法吗?
答案 0 :(得分:2)
当您对DropDownList(Html.DropDownListFor
)使用强类型html帮助程序时,Selected
的{{1}}属性将被Model属性的值覆盖。这说得通。因此,当您使用如下所示的Html Helper时,所选值将为SelectListItem
。由于Model.AnimalNumber
的默认值为0,因此在创建新模型并将其发送到View时,其int
属性的值默认为0.因此,在这种情况下, int
为0,因此,DropDownList的选定值是值为0的项。
Model.AnimalNumber
要解决该问题,您可以将属性类型更改为@Html.DropDownListFor(m => m.AnimalNumber, Animal.ListAnimals())
,也可以确保int?
s的值均为0,或者您可以设置属性的默认值(在本例中为SelectListItem
)。