我试图学习如何将IEnumerable LINQ集合绑定到转发器

我已经使用字符串数组中的LINQ创建了一个IEnumerable的赛车驱动程序列表,如下所示:

string[] driverNames = { "Lewis Hamilton", "Heikki Kovalainen", "Felipe Massa", "Kimi Raikkonen", "Robert Kubica", "Nick Heidfeld", "Fernando Alonso", "Nelson Piquet Jr", "Jarno Trulli", "Timo Glock", "Sebastien Bourdais", "Sebastien Buemi", "Mark Webber", "Sebastian Vettel", "Nico Rosberg", "Kazuki Nakajima", "Adrian Sutil", "Giancarlo Fisichella", "Jenson Button", "Rubens Barrichello" }; IEnumerable result = from driver in driverNames orderby driver select driver; 

我现在只是保持简单。

然后我将它绑定到ASP.NET GridView,如下所示:

 GV_CurrentF1Drivers.DataSource = result; GV_CurrentF1Drivers.DataBind(); 

这很好用。 现在我想采用相同的输出(结果)并将其绑定到转发器,但无论我尝试什么,我都无法使转发器工作,我想我错过了对LINQ的一些关键理解以及它如何与ASP.NET一起工作。

下面是完整的aspx页面,显示我到目前为止所处的位置。 有人(如果可能的话,请轻轻地)引导我回到路上吗?

        

我使用以下代码将结果绑定到Repeater:

 R_CurrentF1Drivers.DataSource = result; R_CurrentF1Drivers.DataBind(); 

当我尝试使用Repeater运行页面时出现以下错误:

exception详细信息: System.Web.HttpException:DataBinding:’System.String’不包含名为’driver’的属性。

你得到了一个没有名字的可枚举的字符串。 如果要使用属性名称驱动程序,可以使用匿名类型并说:

 var result = from driver in driverNames orderby driver select new { Driver = driver }; 

然后进行数据绑定。

我相信你也可以用Eval(".")来评估对象本身而不是属性。 此外,正如下面多个人所说,您可以使用<%# Container.DataItem %>

<%# Eval("driver") %>更改为

 <%# Container.DataItem %> 

尝试

 <%# Container.DataItem.ToString() %> 

eval正在查找名为driver的属性,但您将actuall驱动程序名称作为字符串。 这就像叫“drivername”.DriverName。 您的集合的枚举正在处理实际项目。 如果你真的有一个像IList驱动程序的集合,那就行了。

我意识到这是一个老问题,但我想指出一个字符串数组已经是IEnumerable你可以使用Mehrdad的答案将数组直接绑定到转发器:

 <%# Container.DataItem %> 

因为字符串没有名为“driver”的属性,并且您使用的是字符串列表,所以这不起作用。 尝试用Container.DataItem替换Eval语句

你确定没有类型吗? 因为代码看起来很好。

你也可以使用select new {Driver = driver,DriverAge = driverage等..}

然后在您的ASPX页面中使用以下内容

  
<%# Eval("Driver") %>
<%# Eval("DriverAge ") %>

希望这可以帮助。

或者只是<%# Eval("result.Driver") %>