Asp.net mvc 3 无法遍历集合
好的。。。我已经在这件事上碰壁好几个小时了。这似乎是一件简单的事情,我想不出一个合适的解决办法。这是一个MVC3网站 我有一个web服务,它在我的控制器中成功地返回一个实体框架客户对象,其中包含一条记录。它可以包含许多客户对象,但在本例中,它只有一条记录Asp.net mvc 3 无法遍历集合,asp.net-mvc-3,entity-framework-4.1,Asp.net Mvc 3,Entity Framework 4.1,好的。。。我已经在这件事上碰壁好几个小时了。这似乎是一件简单的事情,我想不出一个合适的解决办法。这是一个MVC3网站 我有一个web服务,它在我的控制器中成功地返回一个实体框架客户对象,其中包含一条记录。它可以包含许多客户对象,但在本例中,它只有一条记录 YeagerTechWcfService.Customer custs = db.GetCustomers(); return View("Index", custs); 尝试遍历Customer对象时,我得到以下错误消息: 不能投 “((S
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中包含客户记录的数据。
@型号YeagerTech.YeagerTechWcfService.Customer
@if (ViewData.Model != null)
{
foreach (YeagerTech.YeagerTechWcfService.Customer item in (IEnumerable<YeagerTech.YeagerTechWcfService.Customer>)ViewData.Model)
@if(ViewData.Model!=null)
{
foreach(YeagerTech.YeagerTechWcfService.Customer项在(IEnumerable)ViewData.Model中)
有人能告诉我如何解决这个问题吗?这个问题与EF无关。你不能将
Customer
对象强制转换为IEnumerable
我不确定当您从控制器传递Customer
对象作为模型时,为什么要在视图中迭代
如果您的GetCustomers()
方法的返回类型为YeagerTech.YeagerTechWcfService.Customer
,则可以创建一个列表并将其传递给视图
var customers = new List<YeagerTech.YeagerTechWcfService.Customer>(db.GetCustomers());
return View("Index", customers);
var customers=新列表(db.GetCustomers());
返回视图(“索引”,客户);
我建议你检查一下你的设计。试试这个
YeagerTechWcfService.Customer custs=db.GetCustomers().ToList()
更新
下面是我在现有网站中的代码,它返回一个可枚举列表,我在控制器中迭代该列表
public List<Subscriber> GetSubscribers()
{
using (var database = new Data.MyCoolDatabase())
{
return database.Subscribers.ToList();
}
}
public List GetSubscribers()
{
使用(var database=new Data.myColdDatabase())
{
返回database.Subscribers.ToList();
}
}
在您的视图中,确保您的模型语句是IEnumerable,就像这样
@model IEnumerable<Newsletter.Web.Models.Subscriber>
@model IEnumerable
我不能肯定地说,因为我看不到您的代码,但我假设您的视图被设置为强类型客户视图,如果您将其更改为IEmumurable,它应该可以解决问题
编辑:将@model line从Customer
更改为IEnumerable
,从错误消息判断,这将修复您的错误,您将其设置为客户类型的强类型视图,这只允许您使用单个客户来使用IEnumerable
视图模型行需要重新定义为mtch t他或你将永远收到此错误如果这不能修复你的错误,请用你的视图的完整来源更新你的问题,以便我们可以查看所有内容你有一个客户列表(或可枚举)和一个客户。它从以下行开始:
YeagerTechWcfService.Customer custs = db.GetCustomers();
左侧的声明清楚地表明它是一个单一客户,而右侧的方法名称表示您希望看到一个客户列表
在视图中,您将模型声明为单个客户:
@model YeagerTech.YeagerTechWcfService.Customer
但是,您不使用强类型实例变量Model
,而是使用非类型属性ViewData.Model
,并将其强制转换为非类型属性(从而获得错误)
现在,db.GetCustomers()
返回一个客户(不是一个包含单个客户的列表)。因此,从视图中删除foreach循环,只需编写:
@if (Model != null)
{
<p>@Model.FirstName @Model.LastName</p>
...
}
你的看法是:
@model List<YeagerTech.YeagerTechWcfService.Customer>
@if (Model != null)
{
foreach (YeagerTech.YeagerTechWcfService.Customer item in Model)
{
<p>@item.FirstName @item.LastName</p>
....
}
}
@型号列表
@如果(型号!=null)
{
foreach(模型中的YeagerTech.YeagerTechWcfService.Customer项)
{
@item.FirstName@item.LastName
....
}
}
应该不需要使用
ViewData.Model
或type cast。它们只是覆盖类型不匹配。编辑了您的帖子,您可以看到您的代码不完整。您可以用完整的代码更新吗?db.GetCustomers()的返回结果是什么
除非YeagerTechWcfService,否则它不会编译。Customer
实现IEnumerable
。您的评论不正确…ToList将DbSet转换为IEnumerable对象。我将更详细地更新我的答案。请仔细查看YeagerTechWcfService.Customer custs=db.GetCustomer中=
左侧的内容s().ToList()
。你能为客户
对象分配一个列表吗?嘿,你说得对!我错过了sagesky36想要将可枚举列表放入单个对象的事实。sagesky36很可能很沮丧,因为他/她已经花了数小时在这个问题上,无法实现这一点。也许你可以通过编辑答案来达到更好的目的真正有帮助的解决方案,而不是质疑他/她的动机,否决我的答案,并指出我的答案有缺陷。我认为sagesky36只是想找到问题的答案。简单地做你的答案并没有太大帮助。我将web服务中的方法从public Customer GetCustomers()更改为public IEnumerable GetCustomers()。我在此方法内执行以下查询,如下所示:IEnumerable customer=null;var customerEntity=from c in DbContext.Customers仅执行您的答案没有多大帮助。我将web服务中的方法从public customer GetCustomers()更改为public IEnumerable GetCustomers()。我正在该方法内执行以下查询,如下所示:IEnumerable customer=null;IEnumerable customer=null;var customerEntity=from c in DbContext.customer我在上一条语句中收到如下错误:无法强制转换“customerEntity.ToList()”(其实际类型为“System.Collect
@model List<YeagerTech.YeagerTechWcfService.Customer>
@if (Model != null)
{
foreach (YeagerTech.YeagerTechWcfService.Customer item in Model)
{
<p>@item.FirstName @item.LastName</p>
....
}
}