我正在使用ASP.NET MVC3我需要创建一个具有4个值的DropDownList:
- 别介意
- 0
- 1
- 2或+
选择"不介意"。
这是我的代码:
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"
,我相信我们可以覆盖这种行为。有人知道怎么做吗?
(顺便说一句,我知道我的问题非常接近这个问题,但这个线程中给出的答案并不能让我满意。我不想用HTML编写DDL,因为我会失去我的值和模型之间的绑定,而编写jQuery脚本来更改所选值"有点麻烦"。)
有什么合适的方法吗?
当您为DropDownList(Html.DropDownListFor
)使用强类型html帮助程序时,SelectListItem
的Selected
属性将被Model属性的值覆盖。这很有道理。因此,当您像下面这样使用Html Helper时,所选的值将是Model.AnimalNumber
。由于int
的默认值为0,因此当创建新模型并将其发送到视图时,其int
属性的值默认为0。因此,在这种情况下,Model.AnimalNumber
为0,因此,DropDownList的选定值是值为0的项目。
@Html.DropDownListFor(m => m.AnimalNumber, Animal.ListAnimals())
为了解决该问题,您可以将属性的类型更改为int?
,也可以确保SelectListItem
的值都不为0,或者为属性设置默认值(在本例中为AnimalNumber = -1
)。