【问题标题】:MVC 5.1 Razor DisplayFor not working with Enum DisplayNameMVC 5.1 Razor DisplayFor 不使用 Enum DisplayName
【发布时间】:2014-06-20 19:58:50
【问题描述】:

我有以下包含枚举的实体(域)对象和模型。显示名称正确显示并且适用于 EnumDropdownList 但由于某种原因不适用于 DisplayFor 帮助程序,显示的只是实际的枚举名称。

不确定我缺少什么,asp.net MVC 5.1 为此添加了显示名称支持,因此我不需要创建自己的辅助方法。见:https://aspnet.codeplex.com/SourceControl/latest#Samples/MVC/EnumSample/EnumSample/Models/Enums.cs

public class Addon
{
    public int Id { get; set; }
    public AddonType AddonType { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool IsActive { get; set; }
}

public enum AddonType : byte
{
    [Display(Name = "Cake Theme")]
    CakeTheme,
    [Display(Name = "Cake Flavour")]
    CakeFlavour,
    [Display(Name = "Cupcake Icing")]
    CupcakeIcing,
    [Display(Name = "Party Addon")]
    AddOn
}

型号

public class AddonModel
{
    public int Id { get; set; }
    public AddonType AddonType { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int Quantity { get; set; }
    public bool IsActive { get; set; }
}

查看

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>Type</th>
        <th>Name</th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(model => item.AddonType)
        </td>
        <td>
            @Html.DisplayFor(model => item.Name)
        </td>
        <td>
            @Html.DisplayFor(model => item.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>

【问题讨论】:

    标签: c# razor enums asp.net-mvc-5.1


    【解决方案1】:

    创建新文件夹 Views/Shared/DisplayTemplates
    将名为 Enum 的空局部视图添加到文件夹
    将枚举视图代码替换为:

    @model Enum
    
    @if (EnumHelper.IsValidForEnumHelper(ViewData.ModelMetadata))
    {
        // Display Enum using same names (from [Display] attributes) as in editors
        string displayName = null;
        foreach (SelectListItem item in EnumHelper.GetSelectList(ViewData.ModelMetadata, (Enum)Model))
        {
            if (item.Selected)
            {
                displayName = item.Text ?? item.Value;
            }
        }
    
        // Handle the unexpected case that nothing is selected
        if (String.IsNullOrEmpty(displayName))
        {
            if (Model == null)
            {
                displayName = String.Empty;
            }
            else
            {
                displayName = Model.ToString();
            }
        }
    
        @Html.DisplayTextFor(model => displayName)
    }
    else
    {
        // This Enum type is not supported.  Fall back to the text.
        @Html.DisplayTextFor(model => model)
    }
    

    这里是link to detailed article by Shahriar Hossain

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 2011-08-08
      • 2013-02-02
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多