2017-03-29 5 views
0

veRWeNdeN ASPNET MVC 4, sagen, ich habe eine EnumerationAufzählung toselectlist mit korrektem Wert

public enum IndicatorGroup 
    { 
     Include_ANY_MatchingIndicator = 1, 
     Include_ALL_MatchingIndicator = 2, 
     Exclude_ANY_MatchingIndicator = 3, 
     Exclude_ALL_MatchingIndicator = 4 
    }; 

ich folgende Hilfsmethode verwenden, um sie zu binden Liste Dropdown wie hier beschrieben: How do you create a dropdownlist from an enum in ASP.NET MVC?

public static class MyExtensions{ 
    public static SelectList ToSelectList<TEnum>(this TEnum enumObj) 
     where TEnum : struct, IComparable, IFormattable, IConvertible 
    { 
     var values = from TEnum e in Enum.GetValues(typeof(TEnum)) 
      select new { Id = e, Name = e.ToString() }; 
     return new SelectList(values, "Id", "Name", enumObj); 
    } 
} 

Jetzt möchte ich, dass der ausgewählte Wert eine Zahl ist (dies wird wahrscheinlich in dem obigen Code als angegeben)

Id = e , 

aber wenn ich den ausgewählten Wert bekomme, gibt es mir den Text Exclude_ALL_MatchingIndicator anstelle der Zahl 4. Wie kann ich es richtig einstellen?

VIEW

@Html.DropDownListFor(m => m.IndicatorGroups, Model.IndicatorGroups.ToSelectList(), new { @id = "ddlIndicatorGroup" }) 
+0

'Id = (int) e', aber warum wollen Sie es sich um eine Nummer zu sein? –

+0

tat id = (int) e, aber es gab Parse-Fehler. kann nicht konvertieren Typ TEnum zu int – Samra

+0

Ich möchte einfach Wert in der Dropdown-Liste als Zahlen und Text als Include_ANY_MatchingIndicator usw. – Samra

Antwort

1

können Sie Convert.ToInt32(e) verwenden, so dass der Code

var values = from TEnum e in Enum.GetValues(typeof(TEnum)) 
      select new { Id = Convert.ToInt32(e), Name = e.ToString() }; 
return new SelectList(values, "Id", "Name", Convert.ToInt32(enumObj)); 

möchten Sie jedoch wird nicht wirklich das tun. Wenn der Wert der Eigenschaft IndicatorGroups beispielsweise IndicatorGroup.Exclude_ANY_MatchingIndicator lautet, zeigt Ihre Methode DropDownListFor() zunächst die erste Option an, da der Wert der Eigenschaft keinem der Optionswerte entspricht. Intern baut die Methode ein neues IEnumerable<SelectListItem> auf dem zweiten Parameter basiert, und setzt die Selected Eigenschaft, wenn der .ToString() Wert der Immobilie entspricht dem Value Eigenschaft jedes SelectListItem - in Ihrem Fall "Exclude_ANY_MatchingIndicator" nicht übereinstimmen 1, 2, 3 oder 4 so Die erste Option wird ausgewählt (weil etwas sein muss).

Sie haben in den Kommentaren angegeben, dass Sie den ausgewählten Wert als INT in der Datenbank speichern möchten. In diesem Fall konvertieren Sie den gebundenen Wert in Ihrer POST-Methode in eine int. Wenn Sie die 2. Option in der Ansicht auswählen, lautet die IndicatorGroups Eigenschaft Ihres Modells IndicatorGroup.Include_ALL_MatchingIndicator. So speichern Sie den Wert als int verwenden

int valueToSave = (int)model.IndicatorGroups; // returns 2 
Verwandte Themen