没有类型为“IEnumerable”的 ViewData 项具有键“Country.Na

本文关键字:ViewData Country Na 类型 IEnumerable SelectListItem | 更新日期: 2023-09-27 18:34:50

我 ASP.NET MVC 4 应用程序我有一个带有国家/地区下拉菜单的联系表格。对于该菜单,我使用Html.DropDownListFor helper方法。但是,如果未选择国家/地区,则会出现异常:">没有类型为'IEnumerable'的 ViewData 项具有键'Country.Name'。这是我的控制器:

ContactViewModel contactViewModel = new ContactViewModel();
contactViewModel.Countries = DbUnitOfWork.CountriesRepository.GetAll()
    .Select(c => c.Name)
    .AsEnumerable()
    .Select(c => new SelectListItem
    {
        Value = c.ToString(),
        Text = c.ToString()
    });

这是在视图中:

@Html.DropDownListFor(m => m.Country.Name,
    Model.Countries,
    Resources.SelectCountry,
    dropdown)

如您所见,我没有使用ViewData。如何防止此异常?我的模型属性中有[必需],但没有显示错误消息。

更新

这是我视图模型中国家/地区的字段:

    public IEnumerable<SelectListItem> Countries { get; set; }
    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "CountryErrorMessage")]
    [Display(ResourceType = typeof(Resource), Name = "Country")]
    public CountryModel Country { get; set; }

这是在视图中

   @model MyApp.ViewModels.ContactViewModel

没有类型为“IEnumerable<SelectListItem>”的 ViewData 项具有键“Country.Na

我通常在IEnumerable<SelectListItem>未实例化时看到这种情况。

在 ViewModel 中,尝试添加如下所示的构造函数

public ContactViewModel()
{
    Countries = new List<SelectListItem>();
}