enumプロパティを使用してドロップダウンリストを作成し、選択した項目を設定できる拡張メソッドを使用しようとしています。
public enum DefaultEnumSelectItemOptions
{
AddDefaultItemIfEnumIsZero,
ZeroEnumIsDefaultItem
}
public static SelectList ToSelectList(this object enumObj, DefaultEnumSelectItemOptions option = DefaultEnumSelectItemOptions.AddDefaultItemIfEnumIsZero)
{
var asEnum = Enum.Parse(enumObj.GetType(), enumObj.ToString());
var values = Enum.GetValues(enumObj.GetType());
var dataItems = new List<Tuple<string, int>>();
dataItems.Add(new Tuple<string, int>("Select One", -1));
for (int i = 0; i < values.Length; i++)
{
int enumValue = (int)values.GetValue(i);
if (enumValue == 0)
{
if (option != DefaultEnumSelectItemOptions.AddDefaultItemIfEnumIsZero)
{
dataItems.Add(new Tuple<string, int>(values.GetValue(i).ToString(), enumValue));
}
}
else
{
dataItems.Add(new Tuple<string, int>(values.GetValue(i).ToString(), enumValue));
}
}
var selectedItemValue = (int)enumObj;
if (selectedItemValue == 0 && option == DefaultEnumSelectItemOptions.AddDefaultItemIfEnumIsZero)
{
selectedItemValue = -1;
}
return new SelectList(dataItems, "Item2", "Item1", selectedItemValue);
}
モデルは次のようになります。
public enum PropertyTypes
{
Unknown=0,
Vehicle,
Other
}
[DataContract]
public class Property : ClaimEntity
{
[DataMember]
public PropertyTypes PropertyType { get; set; }
public Property()
{
this.PropertyType = PropertyTypes.Vehicle;
}
}
最後に、ビューは次のようになります。
@Html.DropDownListFor(m => m.PropertyType, Model.PropertyType.ToSelectList())
拡張メソッドにブレークポイントを設定すると、正しいように見えますが、選択したオプションがhtmlに表示されません。
私は何が間違っているのですか?
編集提案どおりに使用するように変更しましたがSelectListItem
、値が選択されていません。