2017-01-26 9 views
-1

Я есть месяц классКак отобразить свойство text в выпадающем списке?

public class Month 
{ 
    public int ID { get; set; } // ex: 1 
    public string Name { get; set; } // ex: January 
    public string ShortName { get; set; } // ex: JAN 

Он привязан к моей модели представления

public List<SelectListItem> Months { get; set; } 
    public int SelectedMonth { get; set; } 

    public IEnumerable<SelectListItem> MonthItems 
    { 
     get { return new SelectList(Months, "Id"); } 
    } 

Вот мое мнение:

@Html.DropDownListFor(m => m.SelectedMonth, Model.Months) 

В выпадающем списке отображаются только ID. Как я могу заставить его показать свойство Name месяца, но все же «ссылку» на ID.

Я видел другие примеры использовать что-то вроде этого ...

@Html.DropDownList("Month", 
    Enumerable.Range(1, 12).Select(i => new SelectListItem 
    { 
     Value = i.ToString(), 
     Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) 
    })) 

... но дело в том, что я хочу только месяцы показ, что на самом деле есть данные в год, выбранного в другой капле вниз. У меня уже есть этот запрос. Точка в том, что я не могу просто автопопуляцией выпадающего списка со всеми месяцами, потому что несколько месяцев «не существует»

ответ

0

Вы можете использовать код, который вы отправили в конце, только с вашим списком применимых месяцев вместо части Enumerable.Range(1, 12) , Чтобы получить этот список, вы можете использовать GroupBy в своем наборе данных. Вы не отправлял модель для меня работать, но, как правило, это будет выглядеть примерно так:

var months = dataset.GroupBy(g => g.DateProperty.Month).Select(m => m.Key); 

Тогда:

months.Select(i => new SelectListItem 
{ 
    Value = i.ToString(), 
    Text = System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat.GetMonthName(i) 
})) 

При запуске группы мимо, вы будете в конечном итоге со списком списков, где каждый список привязан к целому числу, представляющему месяц элементов в этом списке. Важно отметить, что это будет содержать только месяцы, которые были найдены в вашем наборе данных, естественно, исключая те, которые не представлены. Затем вы просто выбираете ключи, чтобы получить перечисление только целых чисел месяца. Я не уверен, как вы в настоящее время получаете список доступных лет, но там же можно использовать ту же процедуру.