次のヘルパーメソッドを使用して、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;
}
次に、コントローラーでメソッドを呼び出し、4番目のパラメーターを顧客タイプの事前に選択されたIDとしてselectListコンストラクターに渡します。
_view.CustomerTypeSelectList = new SelectList(EnumHelper.GetSelectList<CustomerTypeEnum>(), "Value", "Text", _customer.TypeID);
次に、ビューでselectListをバインドします
<%=Html.DropDownListFor(x => x.CustomerTypeId, Model.CustomerTypeSelectList )%>
ただし、selectListを事前入力することはできません。
何か案は?