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

jhi*_*den 7 c# asp.net-mvc enums

我喜欢在MVC 5.1新Html.EnumDropdownListFor,我看到,我可以指定这样的显示属性中值的顺序:

    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
}
Run Code Online (Sandbox Code Playgroud)

这种解决方案似乎与本地化短视.有没有办法自动让MVC按字母顺序为我订购DDL?

bra*_*is7 7

我想出了一个获取Enum值的解决方案,对它们进行排序,然后拨打电话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);
}
Run Code Online (Sandbox Code Playgroud)


Jak*_*ows 1

有没有办法让 MVC 自动按字母顺序对 DDL 进行排序?

我不明白怎么办。所有重载似乎都不采用任何形式的排序参数,例如 ASC 或 DESC。看来您要么必须实现您自己的 EnumDropDownListFor 版本(可能使用 EnumDropDownListFor 本身),要么使用 JavaScript 解决方案在事后对选择元素进行排序。