【发布时间】: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