加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何本地化枚举并使用类似于Html.SelectListFor

发布时间:2020-12-16 07:09:10 所属栏目:asp.Net 来源:网络整理
导读:假设我得到了以下类和枚举: public class MyModel{ [DisplayName("Min egenskap")] public MyEnum TheProperty {get;set;}}public enum MyEnum{ [DisplayName("Inga fr?n Sverige")] OneValue,[DisplayName("Ett annat v?rde")] AnotherValue} 上面的代码不
假设我得到了以下类和枚举:

public class MyModel
{
    [DisplayName("Min egenskap")]
    public MyEnum TheProperty {get;set;}
}

public enum MyEnum
{
  [DisplayName("Inga fr?n Sverige")]
  OneValue,[DisplayName("Ett annat v?rde")]
  AnotherValue
}

上面的代码不起作用,因为DisplayNameAttribute不能在枚举上使用.还有其他可以使用的属性吗?

我想要做的是使用Html.SelectListFor(m => m.TheProperty)之类的东西生成一个漂亮的html选择标签.该列表将在生成期间使用DisplayNameAttribute或类似属性.

通缉结果:

<select name="TheProperty">
<option value="OneValue">Inga fr?n Sverige</option>
<option value="AnotherValue" selected="selected">Ett annat v?rde</option>
</select>

解决方法

如何执行此操作的示例是使用枚举上的[Description]属性:

public enum DaysOfWeek
{
    [Description("Monday")]
    Monday = 1,[Description("Tuesday")]
    Tuesday = 2
}

然后创建这个EnumerationHelper类,它将允许您获取枚举的Description属性:

public static class EnumerationHelper
{
    //Transforms an enumeration description into a string 
    public static string Description<TEnum>(this TEnum enumObject)
    {
        Type type = enumObject.GetType();
        MemberInfo[] memInfo = type.GetMember(enumObject.ToString());

        if(memInfo != null && memInfo.Length > 0)
        {
            DescriptionAttribute[] attributes = (DescriptionAttribute[])memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false);

            if (attributes.Length > 0)
            {
                return attributes[0].Description;
            }
        }

        return enumObject.ToString();

    }
}

然后,您可以查询您的枚举类以获取值和描述,然后构建一个SelectList.您必须在此类中引用EnumerationHelper:

var listOfDaysOfWeek = (from DaysOfWeek d in Enum.GetValues(typeof(DaysOfWeek))
                        select new { ID = d,Description = d.Description() });

viewModel.selectListDaysOfWeek = new SelectList(listOfDaysOfWeek,"ID","Description");

最后在你看来:

<%: Html.DropDownListFor(m => m.DayOfWeek,Model.DaysOfWeek) %>

我希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读