0

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;
        }
    }
}

/ピーター

4

2 に答える 2

1

dropdownlistfor のバインドが適切ではありません。

ドロップダウンでバインドするプロパティ名を提供する必要があるため、値が Razor エンジンによってドロップダウンリストにバインドされるフィールド名を提供することを想定しています。これを試してみてください

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

ここで、AccountId,AccountName は、AvailableCountriesAccountName の値がページに表示され、AccountId が選択時にバインドされるプロパティ フィールドです。

お役に立てれば...

于 2013-10-15T11:27:40.040 に答える
0

CountryId を処理し、代わりにコントローラーで翻訳することで問題を解決しました。次に、モデルが有効でない場合は AvailableCountries リストを再作成し、それをビューに送り返します。

于 2013-10-16T07:44:09.797 に答える