我有一个我正在尝试使用的扩展方法,您可以在其中使用枚举属性创建下拉列表,并设置所选项目:
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
按照建议使用,但是我仍然没有看到选择的值: