0

我有一个简单的模型

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

4

2 回答 2

1

它应该工作。m=>m.Month

在控制器上

MyModel model=new MyModel();
return View(model);
于 2013-06-26T20:04:11.797 回答
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)

还要确保您的模型已实例化且不为空。

于 2013-06-26T20:16:31.937 回答