ASP.NET MVC3 DropDownListFor当项目具有值= 0时强制选择项目

时间:2013-08-15 19:53:01

标签: asp.net-mvc-3 razor selecteditem html.dropdownlistfor selectedvalue

我正在使用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",我相信我们可以覆盖这种行为。 有人知道怎么做?

(顺便说一句,我知道我的问题is very close of this one但是这个帖子中给出的答案并不能让我满意。我不想用HTML编写我的DDL,因为我会松开我的价值和我的模型,并编写一个jQuery脚本来改变选定的值是“有点hacky”。​​)
有任何正确的方法吗?

1 个答案:

答案 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)。