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)
}))