MVC DisplayTemplate - 更改给定字符串值的输出

时间:2014-07-04 16:13:18

标签: asp.net-mvc asp.net-mvc-4 display-templates

我目前有一个视图呈现Employee实体列表的显示页面。 从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 个答案:

答案 0 :(得分:2)

您可以在主视图中添加局部视图并将其调用如下:

@foreach (var item in Model)
{
    // other tds here

    @Html.Partial("_Gender",item.Gender)
}

视图&gt;&gt;中创建名称为 _Gender 的部分视图共享文件夹:

@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>
}

答案 1 :(得分:1)

如果您希望它与显示模板一起使用,那么您需要执行以下操作:

@foreach (var item in Model)
{
    @Html.DisplayFor(model => item.Gender)
}

并在视图模型中附加属性:

[UIHint("Gender")]
public string Gender { get; set; }

UIHint告诉MVC要使用哪个显示模板。否则按照惯例,MVC将寻找一个名为String.chtml的