【问题标题】:Why does my Html.DropDownList give me a list populated with "System.Web.Mvc.SelectListItem" strings?为什么我的 Html.DropDownList 会给我一个填充了“System.Web.Mvc.SelectListItem”字符串的列表?
【发布时间】:2017-07-07 11:48:21
【问题描述】:

我在这个网站上研究了这个问题,发现了几个类似的问题。我尝试了提供的所有建议,但显然,我的实施或我对导致这些解决方案不起作用的解释的理解有些问题。我将不胜感激有关如何解决此问题的指导。

我的项目由以下 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”?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 viewmodel


    【解决方案1】:

    Html.DropDownList 的第二个参数需要IEnumerable&lt;SelectListItem&gt;,而不是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;
        }
    

    【讨论】:

    • 您可以删除“Selected = false”,因为它始终初始化为 false
    • Ben 您的解决方案运行良好,包括您的我的视图模型方法的简化版本。简单、清晰、简短。谢谢!
    【解决方案2】:

    您是否尝试设置数据和文本字段?

    ASP.NET MVC Dropdown List From SelectList

    var selectList = new SelectList(list, "Value" , "Text");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多