2013-06-26 50 views
0

我有一個簡單的模型嘗試使用DropDownListFor與ASP.Net。爲什麼這是錯誤的?

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

+0

它應該工作。 m => m.Month – qwr

+0

你的代碼應該可以工作,你能顯示你的控制器動作嗎? – dom

+0

你是否實例化了ViewModel並將其傳遞給View()?你可以在應該返回這些信息的控制器中顯示你的動作嗎? –

回答

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) 

另外,還要確保你的模型實例,而不是空。

1

它應該工作。 m=>m.Month

和 在控制器

MyModel model=new MyModel(); 
return View(model); 
相關問題