MVC に問題があります (これは新しく、WPF の MVVM から来ています)。
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 文字列をユーザーが選択したものに設定します。
問題は、モデルのリストから国を取得しようとすると、リストが null になることです。
私のモデルの国のリスト:
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;
}
}
}
/ピーター