我使用以下帮助方法将MVC(3)selectList绑定到枚举
public static List<SelectListItem> GetSelectList<T>()
{
Type enumType = typeof(T);
if (!enumType.IsEnum)
throw new ArgumentException("The specified type is not enum");
List<SelectListItem> enumList = new List<SelectListItem>();
var values = Enum.GetValues(enumType);
foreach (var value in values)
{
SelectListItem newItem = new SelectListItem();
newItem.Value = Convert.ToInt32(value).ToString();
newItem.Text = Regex.Replace(Enum.GetName(enumType, value), "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1 ");
enumList.Add(newItem);
}
return enumList;
}
然后在我的控制器中调用该方法,并将第四个参数作为客户类型的预选id传递给selectList构造函数。
_view.CustomerTypeSelectList = new SelectList(EnumHelper.GetSelectList<CustomerTypeEnum>(), "Value", "Text", _customer.TypeID);
然后在视图中我绑定了selectList
<%=Html.DropDownListFor(x => x.CustomerTypeId, Model.CustomerTypeSelectList )%>
但是我无法让selectList预先填充。
有什么想法吗?
答案 0 :(得分:0)
使用字符串 - 字符串值对填充enumList,因此在指定所选元素时,您也应该使用字符串(使用Convert.ToInt32和ToString)。 在GetSelectList帮助器中,您应该返回SelectList,如下所示:
_view.CustomerTypeSelectList = new SelectList(EnumHelper.GetSelectList<CustomerTypeEnum>(), "Value", "Text", Convert.ToInt32(_customer.TypeID).ToString());
更好的解决方案是使用值列的枚举值并从GetSelectList返回SelectList对象:
public static SelectList GetSelectList<T>()
{
Type enumType = typeof(T);
if (!enumType.IsEnum)
throw new ArgumentException("The specified type is not enum");
var values = Enum.GetValues(enumType);
var enumList = values.Select(e=>new { Value = e , Text = Regex.Replace(Enum.GetName(enumType, e), "([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))", "$1 ") })
var selectList = new SelectList(values, "Value", "Text", enumObj);
return selectList;
}