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

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