为什么我的 Html.DropDownList 给我一个包含 "System.Web.Mvc.SelectListItem" 字符串的列表?
Why does my Html.DropDownList give me a list populated with "System.Web.Mvc.SelectListItem" strings?
我在这个网站上研究了这个问题,发现了几个类似的问题。我尝试了所有提供的建议,但显然,我的实施或我对导致这些解决方案不起作用的解释的理解有些问题。如果能提供有关如何解决此问题的指导,我将不胜感激。
我的项目包含以下 ViewModel:
public SelectList MonthList { get; set; }
public SelectList ReverseMonthsLists()
{
var stringViewOfDates = GetDates().Select(_ => _.ToString("MMM yyyy")).ToList();
var list = new List<SelectListItem>();
list.Add(new SelectListItem { Selected = true, Text = stringViewOfDates[0], Value = stringViewOfDates[0] });
for (int i = 1; i < stringViewOfDates.Count(); i++)
{
list.Add(new SelectListItem { Selected = false, Text = stringViewOfDates[i], Value = stringViewOfDates[i] });
}
var selectList = new SelectList(list);
return selectList;
}
public static IEnumerable<DateTime> GetDates()
{
DateTime startDate = new DateTime(2017, 6, 1).Date;
var currentDate = DateTime.Now.Date;
int numberOfMonthsToShow = (currentDate.Year - startDate.Year) * 12 + currentDate.Month - startDate.Month;
if (numberOfMonthsToShow == 0)
numberOfMonthsToShow = 1;
var dates = new List<DateTime>(numberOfMonthsToShow);
for (int i = 0; i < numberOfMonthsToShow; i++)
{
dates.Add(currentDate);
currentDate = currentDate.AddMonths(-1);
}
return dates;
}
我的 Html 视图包含以下语句:
@Html.DropDownList("selectList", Model.ReverseMonthsLists(), "Month
Selector")
我做错了什么导致我的下拉列表只填满 "System.Web.Mvc.SelectListItem"?
Html.DropDownList 的第二个参数需要 IEnumerable<SelectListItem>
,而不是 SelectList
。
尝试将视图模型上的方法更改为:
public IEnumerable<SelectListItem> ReverseMonthsLists()
{
var stringViewOfDates = GetDates().Select(_ => _.ToString("MMM yyyy")).ToList();
var list = new List<SelectListItem>();
list.Add(new SelectListItem { Selected = true, Text = stringViewOfDates[0], Value = stringViewOfDates[0] });
for (int i = 1; i < stringViewOfDates.Count(); i++)
{
list.Add(new SelectListItem { Selected = false, Text = stringViewOfDates[i], Value = stringViewOfDates[i] });
}
return list;
}
您实际上可以将其简化为:
public IEnumerable<SelectListItem> ReverseMonthsLists()
{
var selectListItems = GetDates()
.Select(_ => _.ToString("MMM yyyy"))
.Select((dateString, index) => new SelectListItem { Selected = index == 0, Text = dateString, Value = dateString})
.ToList();
return selectListItems;
}
您是否尝试设置数据和文本字段?
ASP.NET MVC Dropdown List From SelectList
var selectList = new SelectList(list, "Value" , "Text");
我在这个网站上研究了这个问题,发现了几个类似的问题。我尝试了所有提供的建议,但显然,我的实施或我对导致这些解决方案不起作用的解释的理解有些问题。如果能提供有关如何解决此问题的指导,我将不胜感激。
我的项目包含以下 ViewModel:
public SelectList MonthList { get; set; }
public SelectList ReverseMonthsLists()
{
var stringViewOfDates = GetDates().Select(_ => _.ToString("MMM yyyy")).ToList();
var list = new List<SelectListItem>();
list.Add(new SelectListItem { Selected = true, Text = stringViewOfDates[0], Value = stringViewOfDates[0] });
for (int i = 1; i < stringViewOfDates.Count(); i++)
{
list.Add(new SelectListItem { Selected = false, Text = stringViewOfDates[i], Value = stringViewOfDates[i] });
}
var selectList = new SelectList(list);
return selectList;
}
public static IEnumerable<DateTime> GetDates()
{
DateTime startDate = new DateTime(2017, 6, 1).Date;
var currentDate = DateTime.Now.Date;
int numberOfMonthsToShow = (currentDate.Year - startDate.Year) * 12 + currentDate.Month - startDate.Month;
if (numberOfMonthsToShow == 0)
numberOfMonthsToShow = 1;
var dates = new List<DateTime>(numberOfMonthsToShow);
for (int i = 0; i < numberOfMonthsToShow; i++)
{
dates.Add(currentDate);
currentDate = currentDate.AddMonths(-1);
}
return dates;
}
我的 Html 视图包含以下语句:
@Html.DropDownList("selectList", Model.ReverseMonthsLists(), "Month
Selector")
我做错了什么导致我的下拉列表只填满 "System.Web.Mvc.SelectListItem"?
Html.DropDownList 的第二个参数需要 IEnumerable<SelectListItem>
,而不是 SelectList
。
尝试将视图模型上的方法更改为:
public IEnumerable<SelectListItem> ReverseMonthsLists()
{
var stringViewOfDates = GetDates().Select(_ => _.ToString("MMM yyyy")).ToList();
var list = new List<SelectListItem>();
list.Add(new SelectListItem { Selected = true, Text = stringViewOfDates[0], Value = stringViewOfDates[0] });
for (int i = 1; i < stringViewOfDates.Count(); i++)
{
list.Add(new SelectListItem { Selected = false, Text = stringViewOfDates[i], Value = stringViewOfDates[i] });
}
return list;
}
您实际上可以将其简化为:
public IEnumerable<SelectListItem> ReverseMonthsLists()
{
var selectListItems = GetDates()
.Select(_ => _.ToString("MMM yyyy"))
.Select((dateString, index) => new SelectListItem { Selected = index == 0, Text = dateString, Value = dateString})
.ToList();
return selectListItems;
}
您是否尝试设置数据和文本字段?
ASP.NET MVC Dropdown List From SelectList
var selectList = new SelectList(list, "Value" , "Text");