2

我想添加几个月的 dropdoenlist。我想要选择像一月/二月这样的值。我创建了一个这样的动作:

     public DropDownList  GetMyMonthList()
     {
        DropDownList MyddlMonthList = new DropDownList();
        DateTime month = Convert.ToDateTime("1/1/2000");
        for (int i = 0; i < 12; i++)
        {

            DateTime NextMont = month.AddMonths(i);
            ListItem list = new ListItem();
            list.Text = NextMont.ToString("MMMM");
            list.Value = NextMont.Month.ToString();
            MyddlMonthList.Items.Add(list);
        }
        return MyddlMonthList;

    }

我叫它

  ViewBag.months = pm.GetMyMonthList();

在我看来

  @Html.DropDownListFor(model => model.rent_month,new    SelectList(ViewBag.months          as        System.Collections.IEnumerable, "Text","value"),
        "Select Month")

它给出错误值不能为空。参数名称:items

我可能犯了一个愚蠢的错误。我是asp.net mvc3 的新手。请指出我的错误....提前谢谢

4

1 回答 1

2

从错误消息来看,发生的事情是从DropDownListIEnumerable的转换通过返回 null 静默失败。我建议将GetMyMonthList更改为返回IEnumerable<,然后将其直接传递给SelectList的构造函数。

public IEnumerable<SelectListItem> GetMyMonthList()
{
    var MyddlMonthList = new List<SelectListItem>();
    DateTime month = Convert.ToDateTime("1/1/2000");
    for (int i = 0; i < 12; i++)
    {
        DateTime NextMont = month.AddMonths(i);
        var list = new SelectListItem();
        list.Text = NextMont.ToString("MMMM");
        list.Value = NextMont.ToString("MMMM");
        MyddlMonthList.Add(list);
    }
    return MyddlMonthList;
}

编辑

您还可以从 CultureInfo 获取月份名称。

public IEnumerable<SelectListItem> GetMyMonthList()
{
    return CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
        .Select(m => new SelectListItem() { Text = m, Value = m });
}
于 2012-05-05T18:24:26.020 回答