我在下面有这个代码,我使用相同的方法将它绑定到asp.net mvc中的下拉列表。 它工作正常...... 使用ID的几年,手动添加每年都不是一个好主意。 我想要的是优化代码或使用for循环或其他东西减少代码,然后将列表传递给视图。
var list = new SelectList(new[]
{
new { ID = "1", Name = "2015" },
new { ID = "2", Name = "2016" },
new { ID = "3", Name = "2017" },
},
"ID", "Name", 2);
ViewBag.YearIn = list;
return View();
答案 0 :(得分:1)
这是一个快速举例说明如何实现这一点。假设您总是在2015年开始并不好。如果您想在今年开始,可以将const int StartYear
替换为DateTime.Now.Year
。
您还可以设置您希望将来使用的总年数。
const int StartYear = 2015;
const int TotalYears = 3;
var years = new System.Collections.Generic.List<object>();
for (int id = 1, year = StartYear; id <= TotalYears; id++, year++)
{
years.Add(new { ID = Convert.ToString(id), Name = Convert.ToString(year) });
}
var list = new SelectList(years, "ID", "Name", 2);
答案 1 :(得分:0)
for(var i = 2015; i < 2030; i++)
list.Add(new { Id = i-2014, Name = i });
这样的事情应该有效。
答案 2 :(得分:0)
按此DateTime.Now.Year
执行以获取当前年份,然后根据方案添加您想要添加的年数
int year = DateTime.Now.Year;
int uptoyear= year+10;//or it depends on scenario
var years = new System.Collections.Generic.List<object>();
for (var i = year; i <= uptoyear; i++)
years.Add(new { ID = Convert.ToString(i-(year-1)), Name = Convert.ToString(year) });
var list = new SelectList(years, "ID", "Name", 1);
答案 3 :(得分:0)
使用Enumerable.Range自动生成数字列表。
此外,如果需要,使用DateTime.Now.Year以当前年份开始列表。
代码示例工作正常: