0

我正在使用 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 会自动选择 item where Value = "0",尽管有关键字Selected......我怎样才能覆盖它?我真的需要 let Value = "0",我相信我们可以覆盖这种行为。有人知道怎么做吗?

(顺便说一句,我知道我的问题与这个问题非常接近,但这个线程中给出的答案并不让我满意。我不想用 HTML 编写我的 DDL,因为我会失去我的价值和我的模型之间的绑定,并且编写一个 jQuery 脚本来更改所选值是“有点 hacky”。​​)
是否存在任何正确的方法?

4

1 回答 1

2

Html.DropDownListFor当您为 DropDownList ( )使用强类型 html 帮助程序时,您的模型Selected属性SelectListItem的值会覆盖 的属性。这说得通。因此,当您使用下面的 Html Helper 时,选定的值将是Model.AnimalNumber. 因为 an 的默认值为int0,所以当您创建一个新模型并将其发送到您的视图时,其int属性的值默认为 0。因此,在这种情况下,Model.AnimalNumber为 0,因此,选择的值DropDownList 是值为 0 的项目。

@Html.DropDownListFor(m => m.AnimalNumber, Animal.ListAnimals())

为了解决这个问题,您可以将您的属性类型更改为,int?或者您可以确保您的任何SelectListItems 的值都不为 0,或者您可以为您的属性设置一个默认值(在这种情况下AnimalNumber = -1)。

于 2013-08-15T21:19:25.880 回答