传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [System.Int32]'

时间:2012-12-04 10:12:53

标签: asp.net-mvc asp.net-mvc-4 html.dropdownlistfor

ASP.Net MVC 4

我正在尝试在下拉列表中填充国家/地区列表(数据库中的国家/地区表格中的数据)。我收到以下错误:

The model item passed into the dictionary is of type 
System.Collections.Generic.List`1[System.Int32]', but this dictionary requires a model    item of type 'BIReport.Models.Country'.  

我是ASP.Net MVC的新手,我不明白这个错误。我觉得Index方法返回的内容与我在View中使用的模型不匹配。

模型::

namespace BIReport.Models
{
  public partial class Country
  {
    public int Country_ID { get; set; }
    public string Country_Name { get; set; }
    public string Country_Code { get; set; }
    public string Country_Acronym { get; set; }
  }

 }

控制器::

   public class HomeController : Controller
{
    private CorpCostEntities _context;

    public HomeController()
    {
        _context = new CorpCostEntities();
    }

    //
    // GET: /Home/

    public ActionResult Index()
    {
        var countries = _context.Countries.Select(arg => arg.Country_ID).ToList();
        ViewData["Country_ID"] = new SelectList(countries);
        return View(countries);
    }

}

查看::

@model BIReport.Models.Country
<label>
Country @Html.DropDownListFor(model => model.Country_ID, ViewData["Country_ID"] as SelectList)
</label>

我哪里错了?

3 个答案:

答案 0 :(得分:0)

问题出在您的观点的第1行。改变它:

@model IEnumerable<BIReport.Models.Country>

如果您已经通过以下方式执行此操作,则无需传递模型:

ViewData["Country_ID"] = new SelectList(countries);

答案 1 :(得分:0)

您正在选择CountryID,因此您将有一个传递到视图中的整数列表。

我认为你真的想要这样的东西:

public ActionResult Index()
{
    var countries = _context.Countries.ToList();
    ViewData["Country_ID"] = new SelectList(countries, "Country_ID", "Country_Name");
    return View();
}

我不确定为什么你有一个国家作为你的观点的模型。

更新

我仍然不确定该模型为什么是国家/地区,如果您要发布所选国家/地区的ID,则根本不需要模型(或只是有一个整数)。这样就可以了:

查看

@model MvcApplication1.Models.Country

@Html.DropDownListFor(m => m.Country_ID, ViewData["Country_ID"] as SelectList)

答案 2 :(得分:0)

当您说@model BIReport.Models.Country时,这意味着您的视图需要一个包含单个国家/地区详细信息的模型。相反,您需要在下拉列表中显示国家/地区列表。因此,您应该告诉视图寻找国家/地区详细信息列表。 因此@model IEnumerable。