2016-04-28 9 views
5

Ho un enum di alcuni Paesi:Come associare i valori <select> al nome di ciascun elemento in un enum in ASP.NET Core MVC?

public enum Countries 
{ 
    USA, 
    Canada, 
    Mexico, 
} 

Ho poi una proprietà sul mio modello:

[Required] 
public string Country { get; set; } 

A mio avviso ho:

@Html.DropDownList("Country", Html.GetEnumSelectList(typeof(Countries)) ...) 

Vorrei che la value di ogni option nel numero select generato per essere il nome di ciascun articolo dallo Countriesenum. Per impostazione predefinita, il valore è un numero intero a base zero.

+0

prega di non utilizzare asp.net e asp.net-MVC per domande relative ASP.NET core, sono per il framework ASP.NET vecchio/webstack – Tseng

risposta

9

I valori sono numeri interi a base zero poiché è stato richiesto un EnumSelectList, che emette un enum (ovvero i valori int).

Invece, è possibile ottenere l'elenco dei nomi enum, qualcosa come:

@Html.DropDownList("Country", new SelectList(Enum.GetNames(typeof(Countries))) ...) 
+0

Cosa vorresti associare a se la vostra enum sembrava Questo? https://gist.github.com/mariocatch/2f97b5ace087c792de9deed8cdbc7d5e, poiché l'associazione a 'GetNames' imposterà il nome visualizzato completo dell'attributo invece del nome di ciascun elemento. – mariocatch

+0

@mariocatch non è sicuro di cosa intendi: quando aggiungo 'using System.ComponentModel.DataAnnotations' e' [Display (Name = ..' quindi usa 'Enum.GetNames' usa ancora i nomi, non il displayname. Forse è diverso se lo fai in una visualizzazione MVC, ma sembra improbabile. Dai un'occhiata a questa risposta: http://stackoverflow.com/a/26455406/2181514 –

9

Questo ha funzionato per me:

public class Country 
{ 
    [Key] 
    public int Id { get; set; } 


    [Required] 
    public CountryFrom CountryFrom { get; set; } 


    [Required] 
    [StringLength (100, ErrorMessage = "Name has to be less then 100 symbols long")] 
    public string Region { get; set; } 


    public virtual ICollection<Wine> Wines { get; set; } 

} 

public enum CountryFrom 
{ 
    France, Germany, Italy, Spain, Portugal, UK, India, Bulgaria, Other 
} 

Inserire questo nella vista e non dimenticate di importare il

<div class="form-group"> 
     <label asp-for="CountryFrom" class="col-md-2 control-label"></label> 
     <select asp-for="CountryFrom" asp-items="@Html.GetEnumSelectList<CountryFrom>()" class="form-control"></select> 
    </div> 

Spero che possa essere d'aiuto.

Questo vi aiuterà ad avere un elenco a discesa con i dati presi dall'enumerazione e visualizzando il nome di ogni articolo.

Result

Result

1

ho trovato un molto utili tagHelpers su Github da Sakura Iris. https://github.com/sgjsakura/AspNetCore/blob/master/TagHelperDemo.md

È possibile specificare semplicemente la proprietà del modello, eredita l'enumerazione di origine e mostra la Descrizione da una specifica Annotazione dati. Come più, è possibile specificare l'origine dei valori. È molto facile!

@model Project 
<select asp-enum-for="AccessType" asp-text-source="Description" asp-value-source="Value"></select> 
Problemi correlati