MVC模型失去绑定

时间:2013-10-15 09:56:47

标签: c# asp.net-mvc asp.net-mvc-4

我遇到了MVC的问题(新的,来自WPF中的MVVM)。

我的cshtml文件中有一个组合框,允许用户从列表中选择一个国家/地区。但是,在我的模型中,当我尝试从列表中获取国家时,集合为空。

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

/彼得

2 个答案:

答案 0 :(得分:1)

您对dropdownlistfor的绑定不正确。

您可以提供字段名称,其值将由Razor引擎绑定到下拉列表,您需要提供要在下拉列表中绑定的属性名称。试试这个

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

其中AccountId,AccountName是AvailableCountries内的属性字段,其中AccountName值将显示在页面中,而AccountId将在select上绑定。

希望这会有所帮助......

答案 1 :(得分:0)

通过处理CountryId并在我的控制器中进行翻译来解决问题。 然后,如果模型无效,则重新填充AvailableCountries列表并将其发送回视图。