2013-10-15 3 views
0

У меня проблема с MVC (новичок в этом MVVM в WPF).MVC Model loses binding

У меня есть combobox в моем файле cshtml, который позволяет пользователю выбрать страну из списка. Однако в моей модели, когда я пытаюсь извлечь страну из списка, коллекция имеет значение null.

<div class="inputs"> 
    @Html.LabelFor(model => model.SelectedCountry) 
    <div class="input-box"> 
     @Html.DropDownListFor(model => model.CountryID, Model.AvailableCountries) 
    </div> 
    @Html.ValidationMessageFor(model => model.SelectedCountry) 
</div> 

Как вы можете видеть, я привязываю выбранное значение к CountryID. В моей модели я использую этот CountryID для извлечения имени из списка стран и установки строки SelectedCountry в соответствии с тем, что выбрал пользователь.

Проблема в том, что при попытке получить страну из списка в моей модели список равен нулю.

Список стран в моей модели:

public IList<SelectListItem> AvailableCountries 
{ 
    get 
    { 
     if (_availableCountries == null) 
      _availableCountries = new List<SelectListItem>(); 
     return _availableCountries; 
    } 
    set 
    { 
     _availableCountries = value; 
    } 
} 

И население списка стран в мой контроллер.

foreach (var c in _countryService.GetAllCountries()) 
{ 
    model.AvailableCountries.Add(new SelectListItem() { Text = c.Name, Value = c.Id.ToString() }); 
} 

Кроме того, как вы видите в cshtml, значение обязано CountryIID и код для этого свойства является:

public int CountryID 
{ 
    get 
    { 
     return _countryID; 
    } 
    set 
    { 
     if (_countryID != value) 
     { 
      _countryID = value; 
      List<SelectListItem> _list = new List<SelectListItem>(AvailableCountries); 
       SelectedCountry = _list.Find(x => x.Value == _countryID.ToString()).Text; 
     } 
    } 
} 

/Peter

+0

Это просто взгляд, где лежит логика? – walther

+0

Я не вижу список? – MUG4N

ответ

1

Ваше связывание для dropdownlistfor не является правильным ,

Вы должны указать имя поля, значение которого будет привязано движком Razor к выпадающему списку, для которого вам необходимо указать имя свойства, которое вы хотите связать в раскрывающемся списке. Попробовать это

@Html.DropDownListFor(model => model.ActionId, new SelectList(@Model.AvailableCountries,"AccountID","AccountName")) 

где AccountId, AccountName этого поле свойства внутри AvailableCountries где значения AccountName будут показаны в странице и AccountId будет свяжут на выборе.

Надеется, что это помогает ...

+0

Ну, как вы можете видеть в моем обновленном сообщении выше элементов в списке, на самом деле являются SelectListItems, поэтому они сопоставляются стандартным, я думаю. –

0

Решил проблему, заботясь о CountryId и переводе его в моем контроллере вместо этого. Затем просто перепечатайте список AvailableCountries, если модель недействительна и отправит ее обратно в представление.

+0

Именно так вы должны позаботиться об этом. Переход от MVVM/WPF может быть немного сложным из-за безгражданства Интернета. Когда вы подаете представление (заполненное данными), если вы публикуете свои данные, и проблема с тем, что ModelState недействительна, вам необходимо вручную заполнить выпадающие списки, потому что эта информация не отправляется обратно с помощью POST. – Fran