我已经使用字符串数组中的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<string> result = from driver in driverNames
orderby driver
select driver;
我现在只是保持简单。
然后我将它绑定到ASP.NET GridView,如下所示:GV_CurrentF1Drivers.DataSource = result;
GV_CurrentF1Drivers.DataBind();
这很好用。现在我想获取相同的输出(结果)并将其绑定到转发器,但无论我尝试什么我都无法使转发器工作,我想我错过了对LINQ的一些关键理解以及它如何与ASP.NET一起工作
下面是完整的aspx页面,显示我到目前为止所处的位置。有人(如果可能的话,请轻轻地)引导我回到路上吗?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Example1.aspx.cs" Inherits="Example1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="float: left;">
<asp:GridView ID="GV_CurrentF1Drivers" runat="server" />
</div>
<div style="float: left;">
<asp:Repeater ID="R_CurrentF1Drivers" runat="server">
<ItemTemplate>
<%# Eval("driver") %></ItemTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
我使用以下代码将结果绑定到Repeater:
R_CurrentF1Drivers.DataSource = result;
R_CurrentF1Drivers.DataBind();
当我尝试使用Repeater运行页面时出现以下错误:
异常详细信息: System.Web.HttpException:DataBinding:'System.String'不包含名为'driver'的属性。
答案 0 :(得分:9)
你得到了一个没有名字的可枚举的字符串。如果要使用属性名称驱动程序,可以使用匿名类型并说:
var result = from driver in driverNames
orderby driver
select new { Driver = driver };
然后进行数据绑定。
我相信你也可以Eval(".")
评估对象本身而不是属性。此外,正如下面多个人所说,您可以使用<%# Container.DataItem %>
。
答案 1 :(得分:5)
将<%# Eval("driver") %>
更改为
<%# Container.DataItem %>
答案 2 :(得分:1)
试
<%# Container.DataItem.ToString() %>
eval正在寻找一个名为driver的属性,但你将actuall驱动程序名称作为字符串。这就像叫“drivername”.DriverName。您的集合的枚举与实际项目一起使用。如果你真的有一个类似IList驱动程序的集合,那就行了。
答案 3 :(得分:1)
我意识到这是一个老问题,但我想指出一个字符串数组已经是IEnumerable<string>
,您可以使用Mehrdad的答案将数组直接绑定到转发器:
<%# Container.DataItem %>
答案 4 :(得分:0)
因为字符串没有名为“driver”的属性而您正在使用字符串列表,所以这不起作用。尝试用Container.DataItem替换Eval语句
答案 5 :(得分:0)
你也可以使用select new {Driver = driver,DriverAge = driverage等}}
然后在你的ASPX页面中使用以下
<ItemTemplate>
<div class="Driver"><%# Eval("Driver") %></div>
<div class="DriverAge"><%# Eval("DriverAge ") %></div>
</ItemTemplate>
希望这会有所帮助。
答案 6 :(得分:0)
或只是<%# Eval("result.Driver") %>