假设我的数据库有一个参考表,它将值Zebra
,Goat
和Dog
映射到键0
,1
和{ {1}}和DropDownList,用户可以在其中选择其中一个值。
2
用户选择保存到数据库后,我正试图找出一种显示@Html.DropDownListFor(
m => m.Animal,
new SelectList(
new List<Object>{
new {value = 0, text = "Zebra"},
new {value = 1, text = "Goat"},
new {value = 2, text = "Dog"}
},
"value",
"text"
),
new { @class = "form-control" }
)
值的方法。它保存为m => m.Animal
,但我希望显示的文字为2
。如何在@ Html.DropFownListFor上设置默认选择值等于用户的选择(例如Dog
),因此所选项目显示文本2
?
答案 0 :(得分:2)
我发现你的问题有两种可能的含义,所以我想我只会覆盖它们。
如果您正在谈论让下拉菜单显示正确的选定值,Razor应该为您解决此问题。但是,您在不指定SelectList
参数的情况下定义实际selectedValue
对象的事实可能会妨碍您。从技术上讲,DropDownListFor
只需要IEnumerable<SelectListItem>
,而不是实际的SelectList
,并且通常更好地将其传递给前者,因为它更容易且更不容易出错:
@Html.DropDownListFor(
m => m.Animal,
new List<SelectListItem> {
new SelectListItem { Value = "0", Text = "Zebra" },
new SelectListItem { Value = "1", Text = "Goat" },
new SelectListItem { Value = "2", Text = "Dog" }
},
new { @class = "form-control" }
)
但是,如果您正在谈论如何在代码的某个稍后时间点将值2
转换为Dog
,那么您实际上应该使用类似枚举的内容。例如:
public enum Animals
{
Zebra = 0,
Goat = 1,
Dog = 2
}
然后,将您的Animal
属性更改为此类型:
public Animals Animal { get; set; }
最后,既然你正在运行MVC5,你可以使用:
@Html.EnumDropDownListFor(m => m.Animal, new { @class = "form-control" })
您甚至不需要传递选项列表,因为帮助程序只会从Animal
属性键入的枚举中获取它们。
然后,当您想要显示所选动物类型时,您只需使用:
@Html.DisplayFor(m => m.Animal)
Dog
或其设置的任何内容都将自动输出。