ASP.NET MVC: Отображаем Enum на формуе или еще раз о локализации

Из прошлых статей

В одной из прошлых статей я уже писал о том, как можно локализовать Enum при редактировании формы. Как вы помните в MvcTools существует для этого Html.DropDownListFor(). Недавно мне потребовалось просто отобразить на форме значение Enum. Как оказалось, не всё так просто.

Enum. Как оно есть

В библиотеку MvcTools сегодня было добавлено очередное полезное расширение HtmlHelper, которое можно использовать для отображения Enum.

Давайте предположим, что у меня есть некоторое перечисление (Enum):

1: publicenum OrderStatus { 2: Measurement, 3: Calculation, 4: Signing, 5: Expectation, 6: Production, 7: Installation, 8: Completed 9: }

Если я попытаюсь отобразить модель (в моем случае OrderViewModel), в которой содержится свойство типа OrderStatus:

1: @if (Model != null && Model.Any()) { 2: <table> 3: <tr> 4: <th>Номер (ID)th> 5: <th>Датаth> 6: <th>Статусth> 7: <th>Менеджерth> 8: <th>Заказчикth> 9: <th>Примечаниеth> 10: tr> 11: @foreach (var item in Model) { 12: <tr> 13: <td>@item.Name (@item.Id)td> 14: <td>@Html.DisplayFor(x => item.CreatedAt)td> 15: <td>@Html.DisplayFor(x => item.Status)td> 16: <td>@Html.DisplayFor(x => item.ManagerFullName)td> 17: <td>@Html.DisplayFor(x => item.CustomerFullName)td> 18: <td>@Html.DisplayFor(x => item.Description)td> 19: tr> 20: } 21: table> 22: @Html.PagerForPagedList(Model.PageIndex, Model, «index», «orders») 23: }

Обратите внимание на 15 строку. Status у меня имеет тип OrderStatus, то есть enum. В таблице я увижу следующее:

Колонка “статус” выглядит неподобающим образом. Для того чтобы это исправить, надо проделать следующие несложные операции.

Решение задачи отображения Enum

Для начала добавим немного атрибутов:

1: publicenum OrderStatus { 2: 3: [Display(Name = «Замер»)] 4: Measurement, 5: 6: [Display(Name = «Расчет»)] 7: Calculation, 8: 9: [Display(Name = «Заключение договора»)] 10: Signing, 11: 12: [Display(Name = «Ожидание материала»)] 13: Expectation, 14: 15: [Display(Name = «Производство»)] 16: Production, 17: 18: [Display(Name = «Готов к установке»)] 19: Installation, 20: 21: [Display(Name = «Завершен»)] 22: Completed 23: }

В разметке поменяем HtmlHelper на новый EnumDisplayFor из MvcTools:

1: @if (Model != null && Model.Any()) { 2: <table> 3: <tr> 4: <th>Номер (ID)th> 5: <th>Датаth> 6: <th>Статусth> 7: <th>Менеджерth> 8: <th>Заказчикth> 9: <th>Примечаниеth> 10: tr> 11: @foreach (var item in Model) { 12: <tr> 13: <td>@item.Name (@item.Id)td> 14: <td>@Html.DisplayFor(x => item.CreatedAt)td> 15: <td>@Html.EnumDisplayFor(x => item.Status)td> 16: <td>@Html.DisplayFor(x => item.ManagerFullName)td> 17: <td>@Html.DisplayFor(x => item.CustomerFullName)td> 18: <td>@Html.DisplayFor(x => item.Description)td> 19: tr> 20: } 21: table> 22: @Html.PagerForPagedList(Model.PageIndex, Model, «index», «orders») 23: }

Ваше внимание заслуживает только 15 строка. Запустим приложение и посмотрим результат:

 

Колонка “статус” приобрела для пользователей более удобочитаемый вид.

И последнее, что хотелось бы добавить, это то, что на данный момент, локализация из ресурсных файлов не поддерживается, как это реализовано для EnumDropDownList.

Установнка nuget-пакета

Для установки MvcTools-пакета используйте пожалуйста следующий код, который можно выполнить в Pachage Manager Console:

PM> Install-Package MvcTools

Удачного кодирования и да прибудет с вами сила.

Подробнее: http://feedproxy.google.com/~r/blogmusor/~3/BBZPPt146MU/104

Источник: lred.ru

Оцените статью
новости для мужчин