首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法遍历集合

无法遍历集合
EN

Stack Overflow用户
提问于 2011-08-14 02:41:40
回答 4查看 786关注 0票数 0

好的..。我把头撞在墙上已经好几个小时了。似乎很简单的事情要解决,我想不出一个正确的解决方案。这是一个MVC 3网站。

我有一个web服务,它成功地返回了带有一条记录的Controller中的Entity客户对象。它可以包含许多客户对象,但在本例中,它只有一条记录。

代码语言:javascript
复制
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

代码语言:javascript
复制
@if (ViewData.Model != null)
    {
        foreach (YeagerTech.YeagerTechWcfService.Customer item in (IEnumerable<YeagerTech.YeagerTechWcfService.Customer>)ViewData.Model)

有人能告诉我我怎么解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2011-08-14 08:22:29

您有客户列表(或可枚举的)和单个客户的混合。它从以下一行开始:

代码语言:javascript
复制
YeagerTechWcfService.Customer custs = db.GetCustomers();

左边的声明明确表示它是单个客户,但是右侧的方法名称表示您在某种程度上期望得到一个客户列表。

在视图中,您将模型声明为单个客户:

代码语言:javascript
复制
@model YeagerTech.YeagerTechWcfService.Customer

但是,您不使用强类型实例变量Model,而是使用非类型化属性ViewData.Model并将其转换为它不是的(从而获得错误)。

现在,db.GetCustomers()只返回一个客户(而不是一个客户的列表)。因此,从视图中删除foreach循环,只需编写:

代码语言:javascript
复制
@if (Model != null)
{
    <p>@Model.FirstName @Model.LastName</p>
    ...
}

另一种方法是修复db.GetCustomers(),以便它确实返回一个客户列表。然后,您必须将控制器更改为:

代码语言:javascript
复制
List<YeagerTechWcfService.Customer> customerList = db.GetCustomers();
return View("Index", customerList );

你的看法是:

代码语言:javascript
复制
@model List<YeagerTech.YeagerTechWcfService.Customer>

@if (Model != null)
{
    foreach (YeagerTech.YeagerTechWcfService.Customer item in Model)
    {
        <p>@item.FirstName @item.LastName</p>
        ....
    }
}

不应该需要使用ViewData.Model或类型强制转换。他们只是掩盖了类型不匹配。

票数 2
EN

Stack Overflow用户

发布于 2011-08-14 02:56:23

这个问题与EF无关。您只是不能将Customer对象转换为IEnumerable<Customer>

当您将Customer对象从控制器作为模型传递时,我不知道为什么要在视图中迭代。

如果GetCustomers()方法的返回类型为YeagerTech.YeagerTechWcfService.Customer,则可以创建一个列表并将其传递给视图。

代码语言:javascript
复制
var customers = new List<YeagerTech.YeagerTechWcfService.Customer>(db.GetCustomers());
return View("Index", customers);

我建议你重新考虑一下你的设计。

票数 0
EN

Stack Overflow用户

发布于 2011-08-14 03:07:34

我不能肯定地说,因为我看不到您的代码,但我假设您的视图被设置为强类型的客户视图,如果您将其更改为IEmumurable,就会解决问题

编辑:将@模型行从Customer更改为IEnumerable<Customer>,这将修复错误,从错误消息判断,将其设置为客户类型的强类型视图,这只允许您使用单个客户来使用IEnumerable,视图模型行需要重新定义为mtch,否则您将永远收到此错误,如果这不能修复您的错误,请用您的视图的完整来源更新您的问题,这样我们就可以看到所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7054649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档