2011-12-22 52 views
2

我将如何配置我的视图模型和视图,支持包含以下枚举下拉列表默认值:DropDownListFor从枚举使用视图模型

public enum PersonType 
{ 
    Bride, 
    Groom 
} 

我想下拉的文字显示“新娘” ,“新郎”,值分别为0和1。我想为视图配置一个默认(新娘或新郎)。这是为了创建一个“创建”表单,我将发布并稍后确定选择了哪个选项(我猜我需要在我的ViewModel中使用int来跟踪用户选择的内容)。这将如何连线?我正在使用剃刀。

回答

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} 
} 

属性

@Html.DropDownListFor(x=>x.ID,new SelectList(model._list,"key","value")) 
@ValidationMessageFor(x=>x.ID) 
+1

他需要的值是int,除此之外,这是要走的路。 – 2011-12-22 02:32:08

+0

谢谢!我如何在视图中将它默认为“新郎”?我可以发送“选定的值”吗? – 2011-12-22 02:33:54

+0

只是反转您的枚举值 – Rafay 2011-12-22 02:42:40

1

我已经创建了一个的HtmlHelper枚举 - 并设置一个默认字符串te如果模型类型是枚举,则使用该帮助器。

这意味着我可以去@Html.EnumDropDownListFor(x => x.PersonType),它会显示带有枚举选项的下拉列表。

我从this博客复制的帮手,并添加以下到\共享\ EditorTemplates \ String.cshtml字符串模板

@model object 
@if (Model is Enum) 
{ 
    @Html.EnumDropDownListFor(x => x) 
} 
else 
{ 
    @Html.TextBoxFor(x => x) 
} 

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

帮助程序不会将选择框的值设置为底层数字,但它仍会绑定到操作参数。您应该能够很容易地编辑助手,让他们轻松地将底层编号作为下拉列表的一部分。