来自Enum的DropDownListFor,使用ViewModel的默认值

时间:2011-12-22 02:11:00

标签: c# asp.net-mvc asp.net-mvc-3 razor viewmodel

如何配置ViewModel和View以支持包含以下枚举的下拉列表:

public enum PersonType
{
   Bride,
   Groom
}

我希望下拉列表的文字显示“新娘”,“新郎”,值分别为0和1。我想为View配置默认值(新娘或新郎)。这个目的是为了一个“创建”表单,我将发布,然后确定选择了哪个选项(我猜我需要在我的ViewModel中使用一个int来跟踪用户选择的内容)。这怎么会接通?我正在使用Razor。

2 个答案:

答案 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)
}

这意味着我将获得任何枚举的下拉列表,而不必担心更改视图模型。

帮助程序不会将选择框的值设置为基础数字,但它仍然可以很好地绑定到操作参数。您应该可以很容易地编辑帮助程序,将底层数字作为下拉列表的一部分轻松编写。

相关问题