如何配置ViewModel和View以支持包含以下枚举的下拉列表:
public enum PersonType
{
Bride,
Groom
}
我希望下拉列表的文字显示“新娘”,“新郎”,值分别为0和1。我想为View配置默认值(新娘或新郎)。这个目的是为了一个“创建”表单,我将发布,然后确定选择了哪个选项(我猜我需要在我的ViewModel中使用一个int来跟踪用户选择的内容)。这怎么会接通?我正在使用Razor。
答案 0 :(得分:4)
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)
答案 1 :(得分:1)
我为枚举创建了一个HtmlHelper - 如果Model类型是枚举,则设置一个默认的字符串模板来使用该帮助器。
这意味着我可以转到@Html.EnumDropDownListFor( x => x.PersonType )
,它将使用枚举选项呈现下拉列表。
我从this博客复制了帮助程序,并将以下内容添加到\ Shared \ EditorTemplates \ String.cshtml中的字符串模板
@model object
@if (Model is Enum)
{
@Html.EnumDropDownListFor(x => x)
}
else
{
@Html.TextBoxFor(x => x)
}
这意味着我将获得任何枚举的下拉列表,而不必担心更改视图模型。
帮助程序不会将选择框的值设置为基础数字,但它仍然可以很好地绑定到操作参数。您应该可以很容易地编辑帮助程序,将底层数字作为下拉列表的一部分轻松编写。