Creating a Month Dropdown in C# ASP.NET MVC

Chris McKee picture Chris McKee · May 26, 2010 · Viewed 30.4k times · Source

This method seems stupid and a bit heavy; is there a more optimal way of creating the same thing (its for an MVC View Dropdown)

private List<KeyValuePair<int, string>> getMonthListDD
{
    get
    {
        var dDur = new List<KeyValuePair<int, string>>();
        dDur.Add(new KeyValuePair<int, string>(1, "January"));
        dDur.Add(new KeyValuePair<int, string>(2, "Febuary"));
        dDur.Add(new KeyValuePair<int, string>(3, "March"));
        dDur.Add(new KeyValuePair<int, string>(4, "April"));
        dDur.Add(new KeyValuePair<int, string>(5, "May"));
        dDur.Add(new KeyValuePair<int, string>(6, "June"));
        dDur.Add(new KeyValuePair<int, string>(7, "July"));
        dDur.Add(new KeyValuePair<int, string>(8, "August"));
        dDur.Add(new KeyValuePair<int, string>(9, "September"));
        dDur.Add(new KeyValuePair<int, string>(10, "October"));
        dDur.Add(new KeyValuePair<int, string>(11, "November"));
        dDur.Add(new KeyValuePair<int, string>(12, "December"));

        return dDur;
    }
}

Answer

Darin Dimitrov picture Darin Dimitrov · May 26, 2010

In your view model you could have a Months property:

public IEnumerable<SelectListItem> Months
{
    get 
    {
        return DateTimeFormatInfo
               .InvariantInfo
               .MonthNames
               .Select((monthName, index) => new SelectListItem
               {
                   Value = (index + 1).ToString(),
                   Text = monthName
               });
    }
}

which could be directly bound to a DropDownListFor:

<%= Html.DropDownListFor(x => x.SelectedMonth, Model.Months) %>