我喜欢 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/