尝试在ASP.Net中使用DropDownListFor。为什么会出错?

时间:2013-06-26 19:44:53

标签: asp.net-mvc-4

我有一个简单的模型

public class MyModel
{
    public string Month{ get; set;}

    public IEnumerable<SelectListItem> Months
    {
        get
        {
            return new[] { new SelectListItem{ Text="Jan",Value="1" } };
        }
    }
}

我想在DropDownListFor这样的页面上显示这个

@model ViewModels.MyModel
@Html.DropDownListFor(m=>m.Month, new SelectList(Model.Months,"Text","Value"))

当我构建并运行它时,我得到并且错误“对象引用未设置为对象的实例”。 如果我的班级中有一个属性是一个简单的字符串,我可以使用LabelFor(m=>m.TestString)并且它显示正确,所以我知道模型存在。
我错过了什么?

TIA

2 个答案:

答案 0 :(得分:1)

它应该有用。 m=>m.Month

和 在控制器上

MyModel model=new MyModel();
return View(model);

答案 1 :(得分:1)

您的类型不匹配。在您的模型中,您需要执行以下操作:

public SelectList Months
{
   get
   {
        var monthNames = DateTimeFormatInfo.CurrentInfo.MonthNames.Take(12).ToList();
        return new SelectList(monthNames.Select(m => new {Id = monthNames.IndexOf(m) + 1, Name = m}).ToList(), "Id", "Name");
   }

}

然后在您看来,您所需要的只是:

@Html.DropDownListFor(m => m.Month, Model.Months)

还要确保您的模型已实例化而不是null。