steveareeno
steveareeno

Reputation: 1977

Static list of data for dropdown list MVC

I want to have a static list of data in a model that can be used in a viewmodel and dropdown on a view. I want to be able to use it in this way in my controller:

   MaintenanceTypeList = new SelectList(g, "MaintenanceTypeID", "MaintenanceTypeName"),

and access it in my view like this:

@Html.LabelFor(model => model.MaintenanceTypeID)
@Html.DropDownListFor(x => x.MaintenanceTypeID, Model.MaintenanceTypeList, "-- Select --", new { style = "width: 150px;" })
@Html.ValidationMessageFor(x => x.MaintenanceTypeID)

I am currently using a repository pattern for data in the database, but don't want to put this data in the database because it will never change. I still want it in a model though. Basically, my dropdown list should offer the following:

Value                Text
-------------------------------------
Calibration          Calibration
Prevent              Preventative Maintenance
CalibrationPrevent   PM and Calibration

Any help or examples of static lists using models/oop is appreciated

Upvotes: 0

Views: 2722

Answers (1)

AaronLS
AaronLS

Reputation: 38365

You can use a list initializer:

public static SomeHelperClass{
  public static List<SelectListItem> MaintenanceTypeList {
  get {
    return new List<SelectListItem> 
       { new SelectListItem{Value = "Calibration", Text = "Calibration"}
        ,new SelectListItem{ Value = "Prevent", Text = "Preventative Maintenance" } 
        ,etc.
        };
    }
  }
}

Hopefully I didn't miss a curly brace somewhere. You can google "C# list initializer" for more examples. I don't remember off top of my head what the actual collection to is for a SelectListCollection is, but I know there is a overload of DropDownList that accepts List as I often just have a collection of keyvaluepairs or something else, and then in my view I convert it to SelectListItems: someList.Select(i => new SelectListItem { Value = i.Key, Text = i.Value })

Note that another option is to place your values in an enum. You can then use a Description attribute on each enum value:

enum MaintenanceType {
   [Description("Calibration")]
   Calibration = 1,

   [Description("Preventative Maintenance")]
   Prevent = 2
}

Then you can do things like

Enum.GetValues(typeof(MaintenanceType )).Select(m=>new SelectListItem{ Value = m, Text = m.GetDescription()} ).ToList()

That last line was a little off the top of the head, so hopefully I didn't make a mistake. I feel like an enum is more well structured for what you're trying to do.

Upvotes: 1

Related Questions