239 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ciao a tutti,
ho un problema con il costruire una @Html.DropDownList che prende i valori da un eNum


@Html.DropDownList("Contrat",new SituationMatrimonialeModel().ContratPacs.ToSelectList(), "", new { @class = "form-control", @id = "contractPacs", @onchange = "ContratPacs()", @for = "pp1P" })



in SituationMatrimonialeModel ho l'Enum
public ContratPacs ContratPacs { get; set; }


ContratPacs è una classe che contiene questo

public enum ContratPacs
    {
        [Display(Name = "Contrat Authentique")]
        ContratAuthentique = 1,

        [Display(Name = "Contrat Sous Seing Privé")]
        ContratSousSeingPrive = 2,

    }


Il mio problema e che nella DropDownList mi viene visualizzato i valori tipo ContratAuthentique
mentre io vorrei visualizzare i valori come in Display

Avete qualche suggerimento da darmi?
Grazie

***************************
webmaster di:
hydrasail.blogspot.it
canzonivasco.ciucciatiilcalzino.it
***************************
10.806 messaggi dal 09 febbraio 2002
Contributi
Ciao,
anziché usare l'helper @Html.DropDownList, usa @Html.EnumDropDownListFor.
Ecco un esempio, da completare con tutti i tuoi attributi.
@Html.EnumDropDownListFor(x => x.Contrat, "Seleziona un tipo di contratto", new { @class = "nomeclasse" })


In questo modo verrà visualizzato il valore che hai posto sulle varie voci dell'enum grazie agli attributi Display.
Altrimenti c'è questa soluzione alternativa di Marco.
http://www.aspitalia.com/script/1149/Popolare-Lista-Elementi-Enum-ASP.NET-MVC.aspx

ciao,
Moreno
Modificato da BrightSoul il 18 luglio 2018 00.13 -

Enjoy learning and just keep making
239 messaggi dal 03 dicembre 2001
www.fuossbook.it
BrightSoul ha scritto:
Ciao,
anziché usare l'helper @Html.DropDownList, usa @Html.EnumDropDownListFor.
Ecco un esempio, da completare con tutti i tuoi attributi.
@Html.EnumDropDownListFor(x => x.Contrat, "Seleziona un tipo di contratto", new { @class = "nomeclasse" })




Ciao Moreno, ieri pomeriggio quando ho riscontrato il problema ricercando degli esempi in rete ho trovato EnumDropDownListFor, ma non sono riuscito ad usarlo, non viene riconosciuto da Visualstudio
HtmlHelper<MoiModel>' does not contain a definition for 'EnumDropDownListFor' and no extension method 'EnumDropDownListFor' accepting a first argument of type 'HtmlHelper<MoiModel>' could be found (are you missing a using directive or an assembly reference?)  


Il che mi sembra molto strano
quindi cercando di risolvere questo errore ho letto che dovevo aggiungere questo using
using System.Web.Mvc.Html.HtmlHelper


ma ricevo questo errore
'HtmlHelper' does not exist in the namespace 'System.Web.Mvc.Html' (are you missing an assembly reference?)  


Come mai non viene riconosciuto?
Modificato da cyberkings il 18 luglio 2018 09.30 -

***************************
webmaster di:
hydrasail.blogspot.it
canzonivasco.ciucciatiilcalzino.it
***************************
10.806 messaggi dal 09 febbraio 2002
Contributi
Ciao, quell'helper è stato introdotto in ASP.NET MVC 5.1, può darsi che tu stia usando una versione inferiore.

Enjoy learning and just keep making
239 messaggi dal 03 dicembre 2001
www.fuossbook.it
BrightSoul ha scritto:
Ciao, quell'helper è stato introdotto in ASP.NET MVC 5.1, può darsi che tu stia usando una versione inferiore.


possibile io credo di aver capito che uso la 4 :(

***************************
webmaster di:
hydrasail.blogspot.it
canzonivasco.ciucciatiilcalzino.it
***************************
10.806 messaggi dal 09 febbraio 2002
Contributi
Ok, allora puoi seguire lo script di Marco.
In pratica, fornisce un'implementazione equivalente a quella di EnumDropDownListFor.
http://www.aspitalia.com/script/1149/Popolare-Lista-Elementi-Enum-ASP.NET-MVC.aspx

ciao,
Moreno

Enjoy learning and just keep making
239 messaggi dal 03 dicembre 2001
www.fuossbook.it
Ho fatto questo alla fine


in una mia classe Utilities

 public static SelectList SelectListFor<T>()
        where T : struct
    {
        var t = typeof(T);

        if (!t.IsEnum)
        {
            return null;
        }

        var values = Enum.GetValues(typeof(T)).Cast<T>()
                       .Select(e => new { Id = Convert.ToInt32(e), Name = e.GetDescription() });

        return new SelectList(values, "Id", "Name");
    }

    public static string GetDescription<TEnum>(this TEnum value)
    {
            var field = value.GetType().GetField(value.ToString());
            DisplayAttribute[] displayAttributes = (DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), false);

            if (displayAttributes.Length > 0)
            {
                var elementAtOrDefault = displayAttributes.ElementAtOrDefault(0);
                if (elementAtOrDefault != null)
                    return elementAtOrDefault.Name;
            }
            return value.ToString();
        }

    }




  public enum ContratPacs
    {
        [Display(Name = "Contrat Authentique")]
        ContratAuthentique = 1,

        [Display(Name = "Contrat Sous Seing Privé")]
        ContratSousSeingPrive = 2,

    }



e poi nella view ho usato una dropdownlist

 @Html.DropDownListFor(client => client..ContratPacs, Utilities.SelectListFor<ContratPacs>(), "", new { @class = "form-control", @id = "contratPacs" })



Grazie

***************************
webmaster di:
hydrasail.blogspot.it
canzonivasco.ciucciatiilcalzino.it
***************************
10.806 messaggi dal 09 febbraio 2002
Contributi
Ok, grazie per la condivisione!

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.