2016-05-16 2 views
0

Я пытаюсь сделать меню DROPDOWNLIST года, и у меня есть эта функция в моем контроллере:Регистрация DROPDOWNLIST в MVC

// Year DropDownList 
     private void GetYears() 
     { 
      List<int> Years = new List<int>(); 
      DateTime startYear = DateTime.Now; 
      while (startYear.Year <= DateTime.Now.AddYears(3).Year) 
      { 
       Years.Add(startYear.Year); 
       startYear = startYear.AddYears(1); 
      } 
      ViewBag.Years = Years; 
     } 

И когда я пытаюсь тянуть View я получаю сообщение: выражение дерева не может содержать динамическую операцию. Ошибка здесь: Model => Model.Year.

<div class="editor-field"> 
    @Html.DropDownList("Years", new SelectList(ViewBag.Years as System.Collections.IEnumerable, Model.Year)) 
    @Html.ValidationMessageFor(Model => Model.Year) 
</div> 

Где я ошибся ??

+0

Его просто '@ Html.DropDownList (« Years », новый SelectList (ViewBag.Years)), но это плохая практика. Свойство' ViewBag' не должно быть тем же именем, что и свойство, к которому вы привязываетесь. И вы можете просто использовать 'ViewBag.Years = Enumerable.Range (DateTime.Today.Year, 3);' –

ответ

0

ViewBag является динамическим, следовательно, является ошибкой. Кратчайший всего было бы просто бросить его в список в представлении, как

@{ 
var years = (List<int>)ViewBag.Years; 
} 

, а затем обновить до

@Html.DropDownList("Years", new SelectList(years, Model.Year)) 

Вы также можете прикрепить список лет в качестве свойства модели и то вам не придется беспокоиться о его литье.