没有类型为"IEnumerable <SelectListItem>"的ViewData项具有键"Country.Name".即使我不使用ViewData

Вла*_*нов 4 c# razor asp.net-mvc-4

我的ASP.NET MVC 4应用程序我有一个与国家/地区下拉菜单的联系表单.对于该菜单,我使用Html.DropDownListFor帮助方法.但是如果没有选择country,我会遇到异常:"没有类型为'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()
    });
Run Code Online (Sandbox Code Playgroud)

这是在视图中:

@Html.DropDownListFor(m => m.Country.Name,
    Model.Countries,
    Resources.SelectCountry,
    dropdown)
Run Code Online (Sandbox Code Playgroud)

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

更新

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

    public IEnumerable<SelectListItem> Countries { get; set; }

    [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "CountryErrorMessage")]
    [Display(ResourceType = typeof(Resource), Name = "Country")]
    public CountryModel Country { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是在视图中

   @model MyApp.ViewModels.ContactViewModel
Run Code Online (Sandbox Code Playgroud)

Mat*_*can 9

当我IEnumerable<SelectListItem>没有实例化时,我通常会看到这一点.

在ViewModel中,尝试添加如下构造函数:

public ContactViewModel()
{
    Countries = new List<SelectListItem>();
}
Run Code Online (Sandbox Code Playgroud)