C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';Country.Name';。即使我没有';不要使用ViewData

C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';Country.Name';。即使我没有';不要使用ViewData,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我有一个ASP.NET MVC 4应用程序,我有一个“与国家/地区联系”下拉菜单。对于该菜单,我使用Html.dropdownlistforhelper方法。但如果未选择country,则会出现异常:“没有具有键'country.Name'的'IEnumerable'类型的ViewData项。”这是我的控制器: ContactViewModel contactViewModel = new ContactViewModel(); contactViewModel.Countries = DbUn

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

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。如何防止这种异常?我的模型属性中有[Required],但没有显示错误消息

更新

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

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

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

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

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

public ContactViewModel()
{
    Countries = new List<SelectListItem>();
}
public ContactViewModel()
{
国家=新名单();
}

视图模型的代码在哪里?我相信这就是它所抱怨的。另外,在您看来,视图顶部的
@model
设置为什么?它可以工作!现在,如果未选择国家,我不会收到异常,但也不会收到错误消息。谢谢。这节省了我的时间:)
public ContactViewModel()
{
    Countries = new List<SelectListItem>();
}