asp.net mvc и linq для сущностей: как включить текстовое значение из IEnumerable<SelectListItem>

У меня есть таблица с ограничением на одно поле - это может быть 1, 2 или 3. (Правильное решение этого, вероятно, состоит в том, чтобы создать таблицу поиска для этого, но сейчас я задаюсь вопросом, возможно ли это сделать без справочная таблица.)

Я создал класс, который возвращает IEnumerable для значений. Я использую LINQ to Entities и хотел бы иметь возможность отображать текстовое значение в столбце. при перечислении всех лиц.

Код для создания / редактирования выглядит так:

Controller.cs:

    ViewData["Message_Types"] = MessageTypes.MessageTypeList;

edit.aspx:

  <%= Html.DropDownList("Message_Type",(IEnumerable<SelectListItem>)ViewData["Message_Types"]) %>

и привязка модели по умолчанию работает просто отлично, используя TryModelUpdate:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection form)
{
   ...
  TryUpdateModel(editItem, new string[] { "Message_Type" });
   ...
}

Как, однако, я хотел бы отобразить текстовое значение вместо числового значения:

index.aspx:

  <td>
    <%= Html.Encode(item.Message_Type) %>
  </td>

Как я могу получить текстовое значение элемента, который соответствует item.Message_type?

Обновить:

Типы сообщений выглядят так:

public static IEnumerable<SelectListItem> MessageTypeList
{
  get
  {
    return new[] {
      new SelectListItem{ Text = "Text Value 1", Value="1" },
      new SelectListItem{ Text = "Text Value 2", Value="2" },
      new SelectListItem{ Text = "Text Value 3", Value="3" }
    };
  }

}

2 ответа

Решение

Кажется, это работает - не уверен, что это лучшее решение или нет.

Вместо:

  <td>
    <%= Html.Encode(item.Message_Type) %>
  </td>

Я получаю текстовое значение из:

  <td>
    <%= Html.Encode(MessageTypes.MessageTypeList.Single(foo => foo.Value == item.Message_Type.ToString()).Text)%>
  </td>

Enum.GetName(typeof(MessageTypes), item.Message_Type)

Другие вопросы по тегам