2014-06-09 22 views
5

Tôi yêu Html.EnumDropdownListFor mới trong MVC 5.1, và tôi thấy rằng tôi có thể xác định thứ tự của các giá trị trong thuộc tính hiển thị như thế này:Html.EnumDropdownListFor tôi có thể đặt hàng theo thứ tự abc?

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 
} 

Giải pháp này dường như ngắn nhìn thấy với nội địa hóa. Có cách nào để tự động có MVC thứ tự DDL theo thứ tự abc cho tôi?

+0

'Đơn hàng' dường như không phân loại cho tôi. – bradlis7

+0

Tạo một phương thức mở rộng để chuyển đổi một Enum thành một SelectList. Ngoài ra tôi khuyên bạn không nên sử dụng Enums và thay vào đó sử dụng các lớp ngay cả khi chúng là KeyValuePair hoặc Tuple. –

+1

Bắt đầu từ 1, bạn có không có thần không? – Sinjai

Trả lời

1

Có cách nào để tự động đặt hàng MVC DDL theo thứ tự abc cho tôi không?

Tôi không hiểu cách thực hiện. Không có quá tải nào xuất hiện dưới bất kỳ dạng tham số nào như ASC hoặc DESC. Có vẻ như bạn phải thực hiện phiên bản EnumDropDownListFor của riêng mình, có khả năng sử dụng EnumDropDownListFor, hoặc sử dụng giải pháp javascript để sắp xếp phần tử chọn sau khi thực tế.

5

Tôi đã đưa ra giải pháp nhận giá trị Enum, sắp xếp chúng và sau đó thực hiện cuộc gọi đến 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ác vấn đề liên quan