我有这个由我的枚举
生成的下拉列表@Html.DropDownList("MyType",
EnumHelper.GetSelectList(typeof(C_Survey.Models.QuestionType)),
"Select My Type",
new { @class = "form-control N_Q_type" })
枚举:
public enum QuestionType {
Single_Choice,
Multiple_Choice,
Range
}
我的问题是,如何用空格替换_
?
答案 0 :(得分:2)
我不知道GetSelectList
方法的详细信息,但我认为它会收到System.Enum
并返回SelectList
这样的集合:
public static SelectList GetSelectList(this Enum enumeration)
{
var source = Enum.GetValues(enumeration);
// other stuff
...
return new SelectList(...);
}
有两种方法可以解决这个问题:
第一种方法(使用自定义属性)
此方法涉及创建自定义属性以定义显示名称(将属性目标设置为字段或适合整个枚举成员的其他属性):
public class DisplayNameAttribute : Attribute
{
public string DisplayName { get; protected set; }
public DisplayNameAttribute(string value)
{
this.DisplayName = value;
}
public string GetName()
{
return this.DisplayName;
}
}
因此,应该将枚举结构修改为:
public enum QuestionType
{
[DisplayName("Single Choice")]
Single_Choice,
[DisplayName("Multiple Choice")]
Multiple_Choice,
[DisplayName("By Range")]
Range
}
稍后,有必要修改GetSelectList
方法以接受上面创建的包含DisplayName
属性的自定义属性:
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");
}
第二种方法(使用Direct Type Cast&amp; Lambda)
与第一种方法类似,GetSelectList
方法将从SelectList
返回enum
,但不使用自定义属性,此方法使用成员名称来构建选择列表项,如下所示({ {1}}是枚举类型参数):
T
您方面的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);
}
方法内容可能略有不同,但基本知识应与这些方法相同。
类似问题:
How do I populate a dropdownlist with enum values?