DropDownListFor从Enum使用ViewModel默认值

本文关键字:ViewModel 默认值 使用 Enum DropDownListFor | 更新日期: 2023-09-27 18:18:38

我如何配置我的ViewModel和View来支持包含以下Enum的下拉列表:

public enum PersonType
{
   Bride,
   Groom
}

我希望下拉菜单的文本显示"新娘","新郎"和值分别为0和1。我想为视图配置一个默认值(新娘或新郎)。这样做的目的是为了创建一个"创建"表单,我将发布该表单,然后确定选择了哪个选项(我猜我需要在ViewModel中使用int来跟踪用户选择的内容)。这是怎么连接起来的?

DropDownListFor从Enum使用ViewModel默认值

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的下拉列表,而不用担心改变视图模型。

帮助器没有将选择框的值设置为基础数字,但它仍然可以很好地绑定到操作参数。您应该能够相当容易地编辑帮助器,因为将底层数字作为下拉列表的一部分非常容易。