MVC3枚举类型处理

在Share/EditorTemplates中新增View,名为Enum.cstml

内容如下

 1  @using MvcApp.Infrastructure
2 @model Enum
3
4 @Html.DropDownListFor(m => m, Enum.GetValues(Model.GetType())
5 .Cast<Enum>()
6 .Select(m => {
7 string enumVal = Enum.GetName(Model.GetType(), m);
8 return new SelectListItem()
9 {
10 Selected = (Model.ToString() == enumVal),
11 Text = m.EnumMetadataDisplay(),
12 Value = enumVal
13 };
14 }))


 设计枚举类型的扩展方法EnumMetadataDisplay

 1 public static class EnumExtension
2 {
3 public static string EnumMetadataDisplay(this Enum value)
4 {
5 var attribute = value.GetType().GetField(Enum.GetName(value.GetType(),value)).GetCustomAttributes(
6 typeof(System.ComponentModel.DataAnnotations.DisplayAttribute),false)
7 .Cast<System.ComponentModel.DataAnnotations.DisplayAttribute>()
8 .FirstOrDefault();
9 if (attribute != null)
10 {
11 return attribute.Name;
12 }
13
14 return Enum.GetName(value.GetType(), value);
15 }
16 }

为枚举值加上DisplayAttribute的特性标注

1  public enum Role
2 {
3 [Display(Name = "管理员")]
4 Admin,
5 [Display(Name = "用户")]
6 User,
7 [Display(Name = "来宾")]
8 Guest
9 }

为视图模型类的源数据类设置枚举字段的编辑方式

 1    [DisplayName("Person Details")]
2 public class PersonMetadata
3 {
4 [HiddenInput(DisplayValue=false)]
5 [ScaffoldColumn(false)]
6 public int PersonId
7 {
8 get;
9 set;
10 }
11 [Display(Name="生日",Prompt="yyyy-MM-dd" )]
12 [DisplayFormat(DataFormatString="{0:yyyy-MM-dd}",ApplyFormatInEditMode=true)]
13 [DataType(DataType.Date)]
14 public DateTime BirthDate
15 {
16 get;
17 set;
18 }
19 [UIHint("MultilineText")]
20 public string FirstName
21 {
22 get;
23 set;
24 }
25 [UIHint("Enum")]
26 public Role Role { get; set; }
27 [AdditionalMetadata("RenderList",true)]
28 public bool IsApproved
29 {
30 get;
31 set;
32 }
33 }
34 [MetadataType(typeof(PersonMetadata))]
35 public partial class Person
36 {
37 }

 

 

转载于:https://www.cnblogs.com/mayamoon/archive/2012/03/11/2389815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值