2012-04-17 51 views
1

我的語法創建一個月內選擇列表在我的控制器內的一個月內有一些麻煩。我得到了幾個月和幾年的工作,但for循環造成了一些麻煩。MVC 3控制器語法錯誤我的選擇列表中的循環

visual studio給我的錯誤是:「無效的初始化成員聲明符」和「名稱Days在當前上下文中不存在」。

視圖模型

public class DateSearchViewModel 
{ 
    public int SelectedMonth { get; set; } 
    public IEnumerable<SelectListItem> Months { get; set; } 
    public int SelectedDay { get; set; } 
    public IEnumerable<SelectListItem> Days { get; set; } 
    public int SelectedYear { get; set; } 
    public IEnumerable<SelectListItem> Years { get; set; } 
} 

控制器

[ChildActionOnly] 
    public ActionResult _Header() 
    { 
     var DateVM = new DateSearchViewModel 
     { 
      //Set selected value of month. 
      SelectedMonth = 5, 
      Months = new List<SelectListItem> 
      { 
       new SelectListItem {Text = "Jan", Value = "1"}, 
       new SelectListItem {Text = "Feb", Value = "2"}, 
       new SelectListItem {Text = "Mar", Value = "3"}, 
       new SelectListItem {Text = "Apr", Value = "4"}, 
       new SelectListItem {Text = "May", Value = "5"}, 
       new SelectListItem {Text = "Jun", Value = "6"}, 
       new SelectListItem {Text = "Jul", Value = "7"}, 
       new SelectListItem {Text = "Aug", Value = "8"}, 
       new SelectListItem {Text = "Sep", Value = "9"}, 
       new SelectListItem {Text = "Oct", Value = "10"}, 
       new SelectListItem {Text = "Nov", Value = "11"}, 
       new SelectListItem {Text = "Dec", Value = "12"}, 
      }, 

      //Set selected value of Day. 
      SelectedDay = 13, 
      Days = new List<SelectListItem> 
      { 
       for (var i = 1; i <= 31; i++) 
       { 
        Days.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString()}); 
       } 
      }, 

      //Set selected value of Year. 
      SelectedYear = 2010, 
      Years = new List<SelectListItem> 
      { 
       new SelectListItem {Text = "2009", Value = "2009"}, 
       new SelectListItem {Text = "2010", Value = "2010"}, 
       new SelectListItem {Text = "2011", Value = "2011"}, 
       new SelectListItem {Text = "2012", Value = "2012"}, 
      } 
     }; 

     return PartialView(DateVM); 
    } 

視圖模型:

@Html.DropDownListFor(x => x.SelectedMonth, Model.Months)/@Html.DropDownListFor(x => x.SelectedDay, Model.Days)/@Html.DropDownListFor(x => x.SelectedYear, Model.Years) 

回答

2

你不能把一個循環,一個初始化:

Days = new List<SelectListItem> 
{ 
    for (var i = 1; i <= 31; i++) 
    { 
     Days.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString()}); 
    } 
}, 

因此,而不是隻是實例並在以後使用的循環:

var DateVM = new DateSearchViewModel 
{ 
    ... 
    Days = new List<SelectListItem>(), 
    ... 
} 

for (var i = 1; i <= 31; i++) 
{ 
    DateVM.Days.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString()}); 
} 
3

當編譯器是想告訴你,你不能這樣做。
初始值設定項只能包含表達式。

相反,你可以使用LINQ:

Days = Enumerable.Range(1, 31) 
       .Select(i => new SelectListItem { Text = i.ToString() }))