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>