2016-09-13 4 views
0

J'ai une classe comme ceci:Entity Framework ASP.NET - DropDownListFor Enum valeurs

namespace CentralParkVIPPreview.Models 
{ 
    [Table("CP-VIP-Preview")] 
    public class CP_VIP_Preview 
    { 
     [Key] 
     [DisplayName("Occupancy Timeline")] 
     [Required] 
     public string occupancyTimeline { get; set; } 
    } 

    public class Homefront : DbContext 
    { 
     public DbSet<CP_VIP_Preview> Data { get; set; } 
    } 

    public enum occupancyTimeline : int 
    { 
     TwelveMonths = 12, 
     FourteenMonths = 14, 
     SixteenMonths = 16, 
     EighteenMonths = 18 
    } 

    public static class MyExtensions 
    { 
     public static SelectList ToSelectList(this occupancyTimeline enumObj) 
     { 
      var values = from occupancyTimeline e in Enum.GetValues(typeof(occupancyTimeline)) 
         select new { Id = e, Name = string.Format("{0} Months", Convert.ToInt32(e)) }; 
      return new SelectList(values, "Id", "Name", enumObj); 
     } 
    } 

} 

Ce que je suis en train de faire est le suivant, prenez les valeurs dans la méthode occupancyTimeline enum (12, 14, 16 , 18) et les utiliser pour un menu déroulant comme ceci:

@model CentralParkVIPPreview.Models.CP_VIP_Preview 
@using CentralParkVIPPreview.Models 

@Html.DropDownListFor(model => model.occupancyTimeline, Model.occupancyTimeline.ToSelectList()); 

mon problème est que je reçois cette erreur:

'string' does not contain a definition for 'ToSelectList' and the best extension method overload 'CentralParkVIPPreview.Models.MyExtensions.ToSelectList(CentralParkVIPPreview.Models.occupancyTimeline)' has some invalid arguments 

sur cette ligne:

Model.occupancyTimeline.ToSelectList() 

Ma question est, qu'est-ce que je fais mal?

Répondre

0

Votre méthode d'extension est un type ENUM et que vous essayez de l'utiliser pour une chaîne, vous pouvez essayer d'ajouter une nouvelle propriété à votre modèle pour analyser la chaîne à ENUM quelque chose comme ceci:

  public occupancyTimeline occupancyTimelineType 
      { 
       get 
       { 
        return Enum.Parse(occupancyTimeline, occupancyTimeline); 

       } 
      } 

dans votre cshtml:

@Html.DropDownListFor(model => model.occupancyTimeline,Model.occupancyTimelineType.ToSelectList()); 
+0

Je suis confus, à quoi ressemblerait toute ma classe? @Aldo – user979331

+0

J'ai remplacé 'chaîne publique occupancyTimeline {get; ensemble; } 'avec' l'occupation publiqueTimeline OccupationTimelineType { get { return Enum.Parse (ocTimation d'occupation, OccurrenceTimeline); }} ' mais je reçois cette erreur' « CentralParkVIPPreview.Models.occupancyTimeline » est un « type », mais est utilisé comme une « variable » \t ' – user979331

+0

s'il vous plaît voir le code de la classe, je l'ai fait quelques changements qu'il devrait fonctionner ! – Aldo

0
[Table("CP-VIP-Preview")] 
    public class CP_VIP_Preview 
    { 
     [Key] 
     [DisplayName("Occupancy Timeline")] 
     [Required] 
     public string occupancyTimeline { get; set; } 


     public occupancyTimelineTypes occupancyTimelineType 
     { 
      get 
      { 
       return Enum.Parse(occupancyTimelineTypes, occupancyTimeline); 

      } 
     } 
    } 

    public class Homefront : DbContext 
    { 
     public DbSet<CP_VIP_Preview> Data { get; set; } 
    } 

    public enum occupancyTimelineTypes : int 
    { 
     TwelveMonths = 12, 
     FourteenMonths = 14, 
     SixteenMonths = 16, 
     EighteenMonths = 18 
    } 

    public static class MyExtensions 
    { 
     public static SelectList ToSelectList(this occupancyTimelineTypes enumObj) 
     { 
      var values = from occupancyTimeline e in Enum.GetValues(typeof(occupancyTimeline)) 
         select new { Id = e, Name = string.Format("{0} Months", Convert.ToInt32(e)) }; 
      return new SelectList(values, "Id", "Name", enumObj); 
     } 
    } 

dans votre html:

@Html.DropDownListFor(model => model.occupancyTimeline,Model.occupancyTimelineType.ToSelectList()); 
+0

Je reçois cette erreur 'CentralParkVIPPreview.Models.occupancyTimeline 'est un' type 'mais est utilisé comme une' variable ' – user979331