c# - Html.EnumDropdownListFor 我可以按字母顺序排序吗?

标签 c# asp.net-mvc enums

我喜欢 MVC 5.1 中的新 Html.EnumDropdownListFor,我发现我可以像这样在 Display 属性中指定值的顺序:

    public enum AssignableDataFieldEnum
    {
        [Display(Name = "Code Value", Order=1)]
        CodeValue = 1,
        [Display(Name = "Final Digit", Order=2)]
        FinalDigit = 2,
        [Display(Name = "Group Number", Order=3)]
        GroupNumber = 3,
        [Display(Name = "Sequence Number", Order=4)]
        SequenceNumber = 4
}

这个解决方案在本地化方面似乎目光短浅。有没有办法自动让 MVC 为我按字母顺序排列 DDL?

最佳答案

我想出了一个解决方案,它获取枚举值,对它们进行排序,然后调用 HtmlHelper.DropDownListFor()

public static MvcHtmlString EnumSortedDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, string optionLabel = null, IDictionary<string, object> htmlAttributes = null) {
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    var selectList = EnumHelper.GetSelectList(metadata.ModelType).OrderBy(i => i.Text).ToList();
    if (!String.IsNullOrEmpty(optionLabel) && selectList.Count != 0 && String.IsNullOrEmpty(selectList[0].Text)) {
        selectList[0].Text = optionLabel;
        optionLabel = null;
    }

    return htmlHelper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
}

关于c# - Html.EnumDropdownListFor 我可以按字母顺序排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127458/

相关文章:

c# - 在 autofac 中注册为 .InstancePerRequest() 的依赖项是否始终在异步延续中可用?

C# 如何将 Datagridview 中的多行保存到一个数据库

C# 如何在 OAuth 重定向后保留 session 或 Cookie 信息?

c# - 从同一应用程序中的另一个 Web API 调用 Web Api

swift - 枚举函数并在 swift 上用新值减去旧值

c# - 剪辑区域不起作用

c# - 在 Javascript 中访问 C# 列表

c# - 如何使用@Ko.Html.Button 将模型属性值发送到 K-MVC 中的 Controller 方法

c# - 如何将适用于整数的通用表达式树代码应用于枚举(例如,如何使 Expression.PostIncrementAssign() 适用于枚举?)?

c++ - C++ 中的分层枚举