741 Stimmen

Wie erstellen Sie eine Dropdownliste aus einer Aufzählung in ASP.NET MVC?

Ich versuche, die Html.DropDownList Erweiterungsmethode, kann aber nicht herausfinden, wie man sie mit einer Aufzählung verwenden kann.

Nehmen wir an, ich habe eine Aufzählung wie diese:

public enum ItemTypes
{
    Movie = 1,
    Game = 2,
    Book = 3
}

Wie erstelle ich eine Auswahlliste mit diesen Werten unter Verwendung der Html.DropDownList Erweiterungsmethode?

Oder ist meine beste Wette, um einfach eine for-Schleife erstellen und die Html-Elemente manuell erstellen?

1voto

Rushino Punkte 9205

Hier eine Variante von Martin Faartoft, bei der Sie benutzerdefinierte Beschriftungen anbringen können, was für die Lokalisierung von Vorteil ist.

public static class EnumHtmlHelper
{
    public static SelectList ToSelectList<TEnum>(this TEnum enumObj, Dictionary<int, string> customLabels)
        where TEnum : struct, IComparable, IFormattable, IConvertible
    {
        var values = from TEnum e in Enum.GetValues(typeof(TEnum))
                     select new { Id = e, Name = customLabels.First(x => x.Key == Convert.ToInt32(e)).Value.ToString() };

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

Verwendung in der Ansicht:

@Html.DropDownListFor(m => m.Category, Model.Category.ToSelectList(new Dictionary<int, string>() { 
          { 1, ContactResStrings.FeedbackCategory }, 
          { 2, ContactResStrings.ComplainCategory }, 
          { 3, ContactResStrings.CommentCategory },
          { 4, ContactResStrings.OtherCategory }
      }), new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Category)

0 Stimmen

Führen Sie jedes Enum-Element in Ihrer Ansicht auf? Was passiert, wenn Sie ein neues Element in Ihrer Aufzählung hinzufügen und wenn Sie viele Aufzählungen für viele Dropdowns haben?

1voto

MarwaAhmad Punkte 750

Ich habe das Folgende getan und es funktioniert erfolgreich:

  • In der Datei view.cshtml:

@model MeinModell.cs

@Html.EnumDropDownListFor(m=>m.MyItemType )
  • Im Modell: MeinModell.cs

public ItemTypes MyItemType { get; set; }

0 Stimmen

Sie haben gerade die Antwort von @Ofiris dupliziert, und dies funktioniert nur für ASP.NET MVC 5.1 und höher.

1voto

PAWAN RAJ Shakya Punkte 166

In MVC4, würde ich wie folgt tun

@Html.DropDownList("RefType", new SelectList(Enum.GetValues(typeof(WebAPIApp.Models.RefType))), " Select", new { @class = "form-control" })

public enum RefType
    {
        Web = 3,
        API = 4,
        Security = 5,
        FE = 6
    }

    public class Reference
    {
        public int Id { get; set; }
        public RefType RefType { get; set; }
    }

1voto

shuvo sarker Punkte 781
        ////  ViewModel

        public class RegisterViewModel
          {

        public RegisterViewModel()
          {
              ActionsList = new List<SelectListItem>();
          }

        public IEnumerable<SelectListItem> ActionsList { get; set; }

        public string StudentGrade { get; set; }

           }

       //// Enum Class

        public enum GradeTypes
             {
               A,
               B,
               C,
               D,
               E,
               F,
               G,
               H
            }

         ////Controller action 

           public ActionResult Student()
               {
    RegisterViewModel vm = new RegisterViewModel();
    IEnumerable<GradeTypes> actionTypes = Enum.GetValues(typeof(GradeTypes))
                                         .Cast<GradeTypes>();                  
    vm.ActionsList = from action in actionTypes
                     select new SelectListItem
                     {
                         Text = action.ToString(),
                         Value = action.ToString()
                     };
              return View(vm);
               }

         ////// View Action

   <div class="form-group">
                            <label class="col-lg-2 control-label" for="hobies">Student Grade:</label>
                            <div class="col-lg-10">
                               @Html.DropDownListFor(model => model.StudentGrade, Model.ActionsList, new { @class = "form-control" })
                            </div>

0voto

Mohammad Karimi Punkte 4003

1- Erstellen Sie Ihr ENUM

public enum LicenseType
{
    xxx = 1,
    yyy = 2
}

2- Erstellen Sie Ihre Serviceklasse

public class LicenseTypeEnumService
    {

        public static Dictionary<int, string> GetAll()
        {

            var licenseTypes = new Dictionary<int, string>();

            licenseTypes.Add((int)LicenseType.xxx, "xxx");
            licenseTypes.Add((int)LicenseType.yyy, "yyy");

            return licenseTypes;

        }

        public static string GetById(int id)
        {

            var q = (from p in this.GetAll() where p.Key == id select p).Single();
            return q.Value;

        }

    }

3- Setzen Sie die ViewBag in Ihrem Controller

var licenseTypes = LicenseTypeEnumService.GetAll();
ViewBag.LicenseTypes = new SelectList(licenseTypes, "Key", "Value");

4- Binden Sie Ihre DropDownList

@Html.DropDownList("LicenseType", (SelectList)ViewBag.LicenseTypes)

1 Stimmen

Sie fügen die Aufzählungspunkte manuell hinzu... Wenn sich Ihre Aufzählung ändert, müssen Sie Ihren Code zweimal ändern. Und was, wenn Sie viele Enums für viele Dropdowns haben?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X