0

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 方法返回的与我在视图中使用的模型不匹配。

模型::

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>

我哪里错了?

4

3 回答 3

0

问题出在您视图的第 1 行。像这样改变它:

@model IEnumerable<BIReport.Models.Country>

如果您已经通过以下方式进行操作,也无需传递模型以查看:

ViewData["Country_ID"] = new SelectList(countries);
于 2012-12-04T10:14:56.253 回答
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)
于 2012-12-04T10:16:45.280 回答
0

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

于 2013-06-26T09:05:10.793 回答