DropDownListFor从Enum使用ViewModel默认值
本文关键字:ViewModel 默认值 使用 Enum DropDownListFor | 更新日期: 2023-09-27 18:18:38
我如何配置我的ViewModel和View来支持包含以下Enum的下拉列表:
public enum PersonType
{
Bride,
Groom
}
我希望下拉菜单的文本显示"新娘","新郎"和值分别为0和1。我想为视图配置一个默认值(新娘或新郎)。这样做的目的是为了创建一个"创建"表单,我将发布该表单,然后确定选择了哪个选项(我猜我需要在ViewModel中使用int来跟踪用户选择的内容)。这是怎么连接起来的?
public enum PersonType
{
Bride=0,
Groom=1
}
在你的模型中你会有一个像
这样的属性public class mymodel{
[Required(ErrorMessage="this field is required")]
public int ID{get;set;}
public IEnumerable<KeyValuePair<string, string>> _list{get;set}
}
在你的控制器
mymodel model = new mymodel();
model._list=Enum.GetNames(typeof(PersonType))
.Select(x => new KeyValuePair<string, string>(x, x.ToString()));
return View(model);
和在你的视图
@Html.DropDownListFor(x=>x.ID,new SelectList(model._list,"key","value"))
@ValidationMessageFor(x=>x.ID)
我已经为枚举创建了一个HtmlHelper -并设置了一个默认字符串模板,以便在模型类型是enum时使用该helper。
这意味着我可以选择@Html.EnumDropDownListFor( x => x.PersonType )
,它会呈现一个带枚举选项的下拉列表。
我从这个博客中复制了帮助器,并将以下内容添加到'Shared'EditorTemplates' string .cshtml
中的字符串模板中@model object
@if (Model is Enum)
{
@Html.EnumDropDownListFor(x => x)
}
else
{
@Html.TextBoxFor(x => x)
}
这意味着我将得到任何enum的下拉列表,而不用担心改变视图模型。
帮助器没有将选择框的值设置为基础数字,但它仍然可以很好地绑定到操作参数。您应该能够相当容易地编辑帮助器,因为将底层数字作为下拉列表的一部分非常容易。