2013-12-16 4 views
2

У меня есть модель, которая имеет следующие поля:DropDownListFor не выбирает значение, когда первый элемент из коллекции

public List<SelectListItem> Months 
{ 
    get 
    { 
     return new List<SelectListItem> 
     { 
      new SelectListItem {Text = "111", Value = "1"}, 
      new SelectListItem {Text = "222", Value = "2"} 
     }; 
    } 
} 
public List<TestModel> ServiceTest { get; set; } 

Где TestModel имеет одно поле:

public string Month { get; set; } 

Модель в виду имеет ServiceTest = new List<ServiceTest> {new ServiceTest {Month = "2"}};

Теперь вопрос. Почему это

@Html.DropDownListFor(m => m.ServiceTest[0].Month, Model.Months) 

не выбирает второе значение. Но это

@Html.DropDownListFor(m => m.ServiceTest[0].Month, new SelectList(Model.Months, "Value", "Text", Model.ServiceTest[0].Month)) 

работа правильная. Я действительно не понимаю, почему первое выражение работает неправильно.

+0

Я знаю, что я не добавить к обсуждению, но что месячники? : -> –

+0

@MichalB., Oh) Этот пример был создан так быстро из реального проекта, и я не заметил этой ошибки. Я исправлю это позже, спасибо – idlerboris

ответ

2

Причина этого в том, что помощник DropDownListFor поддерживает только простые выражения при привязке значения по умолчанию. Такие вещи, как x => x.SomeProp. В первом примере вы используете сложное выражение лямбда (доступ к индексу свойств дочернего объекта и еще одно дочернее свойство).

Ваш второй подход - это правильный способ решения этого ограничения помощника.

+0

Спасибо! Но я думаю, что это так странно. Потому что этот помощник правильно распознает имя и идентификатор поля. И если я использую другой помощник (например, TextBoxFor), он правильно справится с этой ситуацией. Почему различное поведение? – idlerboris

+0

Ну, не спрашивайте меня. Спросите людей, которые написали этого помощника (Microsoft) –

0

Для того чтобы первый оператор работал, вам необходимо предоставить список, с которым он связан.

Создать свойство в классе:

public string[] SelectedMonths { get; set; } 

Затем используйте:

@Html.DropDownListFor(m => m.SelectedMonths, new SelectList(Model.Monthes, "Value", "Text", Model.SelectedMonths)) 
Смежные вопросы