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>
我哪里错了?
答案 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。