【问题标题】:ASP.NET MVC3 DropDownListFor force selected item when an item has Value = 0ASP.NET MVC3 DropDownListFor 当项目的值 = 0 时强制选择项目
【发布时间】:2013-08-15 19:53:01
【问题描述】:

我正在使用 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”。​​)
有没有合适的方法存在?

【问题讨论】:

  • 您的视图中的模型是什么?你能发布你的模型吗?
  • 另外,发布您的控制器操作。
  • 我的模型有一个名为 AnimalNumber 的 int 属性。我只是尝试将它作为一个 int 来处理?并且...问题解决了!但为什么 ??是否有任何适当的方法将属性声明为 int (而不是 int?)并强制我选择的项目不是 Value="0"
  • 那是因为 0 是 int 的默认值。您可以从 1 开始 SelectListItem 值。
  • 我认为关键字Selected 可以覆盖此行为。所以你不知道有什么其他方法可以强制我选择的项目不是 Value="0" 的项目吗?

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


【解决方案1】:

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

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

为了解决这个问题,您可以将您的属性类型更改为int?,或者您可以确保您的SelectListItems 的值都不为0,或者您可以为您的财产(在本例中为 AnimalNumber = -1)。

【讨论】:

  • 我刚试过,但是在这种情况下,选择默认值:如果属性为int,则选择默认值:如果属性为int?,则为null ...
  • 你的前两个解决方案都有效,我会选择其中一个,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2013-08-16
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多