我写了一个扩展方法来读取视图中的枚举器值,并返回Select的HTML以及所有枚举器值和选中的加载控制器。
我将其称为:
@Html.DropDownListFor(m => m.ItemType, Model.ItemTypeList)
在我的模特中:
public IEnumerable<SelectListItem> ItemTypeList { get; set; }
在我的控制器中:
model.ItemTypeList = typeof(ItemTypeToSell).ToLocalizatedSelectList();
另外,我的后端exension方法是:
public static IEnumerable<SelectListItem> ToLocalizatedSelectList(this Type enumType)
{
return (from object item in Enum.GetValues(enumType)
let title = item.GetDescription()
let value = ((int)item).ToString(CultureInfo.InvariantCulture)
select new SelectListItem
{
Value = value,
Text = title
}).ToList();
}
这是我正在使用的枚举器的一个例子:
public enum ItemTypeToSell
{
[LocalizedDescription("Product", typeof(Expressions))]
Product = 1,
[LocalizedDescription("Addon", typeof(Expressions))]
Addon = 2,
[LocalizedDescription("Other", typeof(Expressions))]
Other = 3
}
我将列表列表中的所有枚举值返回,并使用此代码在选择中显示它们。我能够在数据库中提供所选的值。但问题是,当页面加载时,它不会显示所选值,即使方法ToLocalizatedSelectList
返回可以在可发消息列表中选择的项目,也会显示第一个值。
我需要做一些事情,或者我的错误是关于其他事情吗?
--------- 编辑 -----------
我是如何解决问题的:
我使用enumName作为值更改了ToLocalizatedSelectList(此类型enumType)中enum itens的值。当我将其转换为int时,代码会将值保存在数据库中,但代码不会将其视为选定值。
纠正方法:
public static IEnumerable<SelectListItem> ToLocalizatedSelectList(this Type enumType)
{
return (from object item in Enum.GetValues(enumType)
let title = item.GetDescription()
let value = item.ToString()
select new SelectListItem
{
Value = value,
Text = title
}).ToList();
}