Mvc Html.DropDownList on load replace some string
我有一个由枚举生成的下拉列表
1 2 3 4 | @Html.DropDownList("MyType", EnumHelper.GetSelectList(typeof(C_Survey.Models.QuestionType)), "Select My Type", new { @class ="form-control N_Q_type" }) |
枚举:
1 2 3 4 5 | public enum QuestionType { Single_Choice, Multiple_Choice, Range } |
我的问题是,我怎样才能用一个空格替换
我对那里的
1 2 3 4 5 6 7 8 | public static SelectList GetSelectList(this Enum enumeration) { var source = Enum.GetValues(enumeration); // other stuff ... return new SelectList(...); } |
解决这个问题有两种方法:
第一种方法(使用自定义属性)
此方法涉及创建自定义属性以定义显示名称(将属性目标设置为字段或其他适合整个枚举成员的属性):
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class DisplayNameAttribute : Attribute { public string DisplayName { get; protected set; } public DisplayNameAttribute(string value) { this.DisplayName = value; } public string GetName() { return this.DisplayName; } } |
因此,枚举结构应该修改为:
1 2 3 4 5 6 7 8 9 10 11 | public enum QuestionType { [DisplayName("Single Choice")] Single_Choice, [DisplayName("Multiple Choice")] Multiple_Choice, [DisplayName("By Range")] Range } |
以后需要修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static SelectList GetSelectList<T>(this T enumeration) { var source = Enum.GetValues(typeof(T)); var items = new Dictionary<Object, String>(); var displaytype = typeof(DisplayNameAttribute); foreach (var value in source) { System.Reflection.FieldInfo field = value.GetType().GetField(value.ToString()); DisplayNameAttribute attr = (DisplayNameAttribute)field.GetCustomAttributes(displaytype, false).FirstOrDefault(); items.Add(value, attr != null ? attr.GetName() : value.ToString()); } return new SelectList(items,"Key","Value"); } |
第二种方法(使用直接类型转换和lambda)
与第一种方法类似,
1 2 3 4 5 6 7 8 9 | public static SelectList GetSelectList<T>(this T enumeration) { var source = Enum.GetValues(typeof(T)).Cast<T>().Select(x => new SelectListItem() { Text = x.ToString(), Value = x.ToString().Replace("_","") }); return new SelectList(source); } |
可能您这边的
类似问题:
如何用枚举值填充DropDownList?
在带有空格的组合框中显示枚举
DropDownList的带有空格属性的枚举