c# - MVC 5.1 Razor DisplayFür die Verwendung von Enum DisplayName nicht geeignet




1 Answers

Erstellen Sie neue Ordner Views / Shared / DisplayTemplates
Fügen Sie dem Ordner eine leere Teilansicht namens Enum hinzu
Ersetzen Sie Enum View code mit:

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

Hier ist der Link zum ausführlichen Artikel von Shahriar Hossain

Ich habe das folgende Entitätsobjekt (Domäne) und das Modell, die eine Enumeration enthalten. Der Anzeigename wird korrekt angezeigt und funktioniert für eine EnumDropdownList, aber aus irgendeinem Grund, nicht für den DisplayFor-Helfer, wird nur der Name der tatsächlichen Enumeration angezeigt.

Nicht sicher, was ich vermisse, Asp.net MVC 5.1 hinzugefügt Anzeigenamen Unterstützung für diese, so dass ich nicht meine eigenen Hilfsmethoden erstellen müssen. Siehe: 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
}

MODELL

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

AUSSICHT

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



Related