Хранение строковых версий значений состояния базы данных - PullRequest
0 голосов
/ 26 апреля 2011

Я пишу сайт ASP.NET MVC 3, и мне нужно преобразовать некоторые целочисленные значения из базы данных, которые представляют статусы, с помощью читаемых пользователем строк, например:

...
<td>
@item.Status
</td>
...

Я написалHTML Helper для преобразования:

    public static string MessageType(this HtmlHelper helper, int type)
    {
        string messageType = "Unknown";
        switch((Types.MessageTypes)type)
        {
            case Types.MessageTypes.Join:
                messageType = "Join App";
                break;
            case Types.MessageTypes.New:
                messageType = "New App";
                break;
        }

        return messageType;
    }

И я храню типы как перечисление в классе Types.

Мой вопрос: есть ли более чистый способ сделать это?Мне не нравятся эти магические строки в моем коде, и он создает многочисленные зависимости в разных частях кода.

Есть мысли?

Большое спасибо, Сэм

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Я обычно украшаю перечисления с помощью DisplayAttribute следующим образом.

    enum MessageTypes
    {
       [Display(Name = "Join App")]   
       Join,
       [Display(Name = "New App")]     
       New
    }

Затем я использую помощник для их извлечения:

    public static string EnumDisplay(this HtmlHelper helper, Enum model)
    {
        var enumType = model.GetType();
        var modelValue = Convert.ToInt64(model);

        var matches = from field in enumType.GetMembers()
                      where field.MemberType == MemberTypes.Field && Enum.IsDefined(enumType, field.Name)
                      let value = Convert.ToInt64(Enum.Parse(enumType, field.Name, false))
                      where modelValue == value
                      let attribute = field.GetCustomAttributes(typeof (DisplayAttribute), false).Cast<DisplayAttribute>().FirstOrDefault()
                      select attribute == null 
                          ? field.Name 
                          : attribute.Name;

        return matches.FirstOrDefault() ?? "Unknown";
    }

Тогда вы можетедо

  @Html.EnumDisplay((MessageType)item.MessageType)
0 голосов
/ 26 апреля 2011

По моему мнению, вы должны хранить соответствующие читаемые пользователем строки в базе данных рядом с целым числом. И вернуть объект, например StatusViewModel к виду модели. модель View может иметь>

class StatusViewModel
{

   int type;
   string displayMessage;
}

имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...