好的..。我把头撞在墙上已经好几个小时了。似乎很简单的事情要解决,我想不出一个正确的解决方案。这是一个MVC 3网站。
我有一个web服务,它成功地返回了带有一条记录的Controller中的Entity客户对象。它可以包含许多客户对象,但在本例中,它只有一条记录。
YeagerTechWcfService.Customer custs = db.GetCustomers();
return View("Index", custs);当试图迭代Customer对象时,我得到以下错误消息:
'((System.Web.Mvc.WebViewPage)(this)).ViewData.Model‘(它的实际类型为“YeagerTech.YeagerTechWcfService.Customer”)不能将
转换为“System.Collections.Generic.IEnumerable”
它显然不能将我的客户对象转换成IEnumberable对象,我也不知道为什么.当尝试遍历每个“客户”记录时,不能将EF对象转换为IEnumerable对象吗?
在我看来,我有以下代码。ViewData.Model中有客户记录的数据。@model YeagerTech.YeagerTechWcfService.Customer
@if (ViewData.Model != null)
{
foreach (YeagerTech.YeagerTechWcfService.Customer item in (IEnumerable<YeagerTech.YeagerTechWcfService.Customer>)ViewData.Model)有人能告诉我我怎么解决这个问题吗?
发布于 2011-08-14 08:22:29
您有客户列表(或可枚举的)和单个客户的混合。它从以下一行开始:
YeagerTechWcfService.Customer custs = db.GetCustomers();左边的声明明确表示它是单个客户,但是右侧的方法名称表示您在某种程度上期望得到一个客户列表。
在视图中,您将模型声明为单个客户:
@model YeagerTech.YeagerTechWcfService.Customer但是,您不使用强类型实例变量Model,而是使用非类型化属性ViewData.Model并将其转换为它不是的(从而获得错误)。
现在,db.GetCustomers()只返回一个客户(而不是一个客户的列表)。因此,从视图中删除foreach循环,只需编写:
@if (Model != null)
{
<p>@Model.FirstName @Model.LastName</p>
...
}另一种方法是修复db.GetCustomers(),以便它确实返回一个客户列表。然后,您必须将控制器更改为:
List<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
return View("Index", customerList );你的看法是:
@model List<YeagerTech.YeagerTechWcfService.Customer>
@if (Model != null)
{
foreach (YeagerTech.YeagerTechWcfService.Customer item in Model)
{
<p>@item.FirstName @item.LastName</p>
....
}
}不应该需要使用ViewData.Model或类型强制转换。他们只是掩盖了类型不匹配。
发布于 2011-08-14 02:56:23
这个问题与EF无关。您只是不能将Customer对象转换为IEnumerable<Customer>。
当您将Customer对象从控制器作为模型传递时,我不知道为什么要在视图中迭代。
如果GetCustomers()方法的返回类型为YeagerTech.YeagerTechWcfService.Customer,则可以创建一个列表并将其传递给视图。
var customers = new List<YeagerTech.YeagerTechWcfService.Customer>(db.GetCustomers());
return View("Index", customers);我建议你重新考虑一下你的设计。
发布于 2011-08-14 03:07:34
我不能肯定地说,因为我看不到您的代码,但我假设您的视图被设置为强类型的客户视图,如果您将其更改为IEmumurable,就会解决问题
编辑:将@模型行从Customer更改为IEnumerable<Customer>,这将修复错误,从错误消息判断,将其设置为客户类型的强类型视图,这只允许您使用单个客户来使用IEnumerable,视图模型行需要重新定义为mtch,否则您将永远收到此错误,如果这不能修复您的错误,请用您的视图的完整来源更新您的问题,这样我们就可以看到所有内容。
https://stackoverflow.com/questions/7054649
复制相似问题