MVC DisplayTemplate - изменить вывод для данного строкового значения
В настоящее время у меня есть представление, отображающее страницу отображения списка сущностей сотрудников. Значения, возвращаемые из базы данных для свойства Gender, представляют собой строковые значения "M" или "F" для соответствующего пола. Я хотел бы иметь возможность показывать строку "Мужской" или "Женский" в представлении из соответствующего значения свойства.
Я добавил следующую логику в работающий Index.cshtml.
@foreach (var item in Model)
{
<tr>
//... various <td>'s
@if (item.Gender == "M")
{
<td>Male</td>
}
else if (item.Gender == "F")
{
<td>Female</td>
}
}
Я пытаюсь переместить это в шаблон отображения, но не могу заставить его работать.
Я добавил следующий код в Views\Shared\DisplayTemplates\Gender.cshtml:
@model System.String
@if (Model.Gender == "M")
{
<td>Male</td>
}
else if (Model.Gender == "F")
{
<td>Female</td>
}
Каков наилучший способ заставить это работать?
2 ответа
Вы можете добавить частичное представление и назвать его следующим образом:
@foreach (var item in Model)
{
// other tds here
@Html.Partial("_Gender",item.Gender)
}
Создайте частичное представление с именем _Gender в папке View >> Shared:
@model String
@{
Layout = null;
}
@if (Model== "M")
{
<td>Male</td>
}
else if (Model == "F")
{
<td>Female</td>
}
// or
<td>@(Model == "M" ? "Male" : "Female") </td>
Он также может обрабатывать его в главном окне, не создавая частичное представление.
Это может обработать это в главном представлении как это:
@foreach (var item in Model)
{
<tr>
//... various <td>'s
<td>@(item.Gender == "M" ? "Male" : "Female") </td>
</tr>
}
Если вы хотите, чтобы он работал с шаблоном отображения, вам нужно сделать что-то вроде этого:
@foreach (var item in Model)
{
@Html.DisplayFor(model => item.Gender)
}
и в View Model присоедините атрибут:
[UIHint("Gender")]
public string Gender { get; set; }
UIHint сообщает MVC, какой шаблон отображения использовать. В противном случае по соглашению MVC будет искать тот, который называется String.chtml