Asp.net mvc 4 如何在dropdownlist中显示文本属性?

Asp.net mvc 4 如何在dropdownlist中显示文本属性?,asp.net-mvc-4,html.dropdownlistfor,Asp.net Mvc 4,Html.dropdownlistfor,我有一个月的课 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 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"); }
    }
下拉列表仅显示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)
    }))

…但问题是,我只希望显示的月份实际上包含另一个下拉列表中所选年份的数据。我已经建立了这个查询。关键是,我不能只自动填充所有月份的下拉列表,因为有些月份“不存在”

您可以使用您在末尾发布的代码,只使用您的适用月份列表,而不是
可枚举的.Range(1,12)
部分。要获得该列表,可以在数据集上使用
GroupBy
。您没有发布您的模型供我使用,但一般来说,这看起来像:

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

当您运行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)
}))