1

I want to create a select option in Razor pages from Enum object Description

This is my code:

<div class="dropdown-box">
    <select id="type-select">
        @foreach (var item in Enums.OrderStatus)
        {
            <option>@item</option>
        }
    </select>
</div>

and the enum:

public enum OrderStatus
{
    [Description("در انتظار تایید")]
    PendingForAccept = 0,

    [Description("تمام شده")]
    Finished = 1,

    [Description("لغو شده")]
    Canceled = 2,

    [Description("رد شده")]
    Rejected = 3,

    [Description("تایید شده")]
    Accepted = 4
}

How can I extract items descriptions of this enum to string

1 Answers1

1

Here's an example of code that does it.

public static string ExtractDescription<T>(T enumVal) where T : struct
{
    var type = enumVal.GetType();
    if (!type.IsEnum)
    {
        throw new ArgumentException($"{nameof(enumVal)} must be an Enum", nameof(enumVal));
    }

    var memberInfo = type.GetMember(enumVal.ToString());
    if (memberInfo.Length > 0)
    {
        var attributes = memberInfo[0].GetCustomAttributes(attributeType: typeof(DescriptionAttribute), inherit: false);

        if (attributes.Length > 0)
        {
            return ((DescriptionAttribute)attributes[0]).Description;
        }
    }

    return enumVal.ToString();
}

Usage:

var s = ExtractDescription(OrderStatus.PendingForAccept)// s is "در انتظار تایید"

tymtam
  • 31,798
  • 8
  • 86
  • 126