ASP.NET MVC3 DropDownListFor在项的值为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会自动选择Value = "0"的项目,尽管关键字是Selected。。。如何覆盖它?我真的需要让Value = "0",我相信我们可以覆盖这种行为。有人知道怎么做吗?

(顺便说一句,我知道我的问题非常接近这个问题,但这个线程中给出的答案并不能让我满意。我不想用HTML编写DDL,因为我会失去我的值和模型之间的绑定,而编写jQuery脚本来更改所选值"有点麻烦"。)
有什么合适的方法吗?

当您为DropDownList(Html.DropDownListFor)使用强类型html帮助程序时,SelectListItemSelected属性将被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)。

相关内容

  • 没有找到相关文章

最新更新