manas
manas

Reputation: 1

How to create dropdown list from a ENUM in razor pages with different name?

I am using razor pages Enum:

public enum CustomersFilter
{
    Unassigned,
    Unverified_Mobile = 1,
    Unverified_Email = 2,
    Both = 3,
}

payload:

public class UnverifiedCustomersPayload
{
    public CustomersFilter Status { get; set; } = CustomersFilter.Unassigned;
    public IEnumerable<CustomersFilter> FilterableStatus { get; }

    public UnverifiedCustomersPayload()
    {
        FilterableStatus = Enum
                            .GetValues(typeof(CustomersFilter))
                            .Cast<CustomersFilter>()
                            .Where(o => o > CustomersFilter.Unassigned);

    }

public UnverifiedCustomersPayload Filters { get; set; }

HTML:

                        <select class="form-control"
                                asp-for="Filters.Status"
                                asp-items="@(new SelectList(Model.Filters.FilterableStatus))">
                            <option value="0">None</option>
                        </select>

I am getting data and names but with names Unverified_Email and Unverified_Mobile

but I need them as Mobile Unverified and Mobile Unverified

How can I do that?

Upvotes: 0

Views: 1891

Answers (2)

Victor
Victor

Reputation: 8915

If you will use the Display attribute then not necessary to define the <option value="0">None</option>. The Unassigned value already set to 0 value by default. Therefore it's necessary only add a description for it.

public enum CustomersFilter
{
    [Display(Name = "None")]
    Unassigned,
    [Display(Name = "Mobile Unverified")]
    Unverified_Mobile = 1,
    [Display(Name = "Email Unverified")]
    Unverified_Email = 2,
    [Display(Name = "Both")]
    Both = 3,
}

public class UnverifiedCustomersPayload
{
    public CustomersFilter Status { get; set; } = CustomersFilter.Unassigned;
}

The view part can be set as follow:

@using WebApp.Models
@model UnverifiedCustomersPayload

<select class="form-control"
        asp-for="Status"
        asp-items="@Html.GetEnumSelectList<CustomersFilter>()">
</select>

The GetEnumSelectList method generates a SelectList object for an enum.

enter image description here

Upvotes: 2

Ashkan Mobayen Khiabani
Ashkan Mobayen Khiabani

Reputation: 34152

Add Display Attribute to them:

using System.ComponentModel.DataAnnotations;

public enum CustomersFilter
{
    Unassigned,
    [Display(Name="Unverified Mobile")]
    Unverified_Mobile = 1,
    [Display(Name="Unverified Email")]
    Unverified_Email = 2,
    Both = 3,
}

Upvotes: 1

Related Questions