foreach循环中的双零索引C#

时间:2016-04-01 09:27:06

标签: c# foreach

这是我目前遇到的一个非常奇怪的问题。 我的代码中有Repeater,其中我填充了数据。这是按预期工作的。

在我的转发器上,我得到了一个像这样的OnItemDataBound:

<asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays">
  <ItemTemplate>
    <span><%#Eval("name") %></span>
  </ItemTemplate>
</asp:Repeater>

我的转发器显示正确的数据,比如我的数据源包含三个名称,这些名称都应该在span标签中输出!到目前为止,一切正常。

现在出现了奇怪的部分。在我的getOverlays函数中,我有以下代码:

protected void getOverlays(object sender, RepeaterItemEventArgs e) {
  foreach (RepeaterItem item in repeater.Items) {
    Response.Write(item.ItemIndex);
  }
}

在我的世界里,这个空白会写出

0
1
2

但现在这行代码写出

0
0
1
对我来说这是一个很大的谜!以前有人遇到过这样的问题吗?我做错了什么?

我清楚地看到了我的数据源的3个名称,并且我得到三个索引只是前两个索引获得相同的索引,即0。

我的索引在第一次迭代之后会被重置一些东西,但我之前从未遇到过这个问题,任何人都有这个问题的解决方案,或者能指出我为什么我的索引失真的正确方向?

提前谢谢。

3 个答案:

答案 0 :(得分:3)

你不应该在OnItemDataBound事件中循环,它会自动为每个项目调用一次。相反,您应该使用e.Item.ItemIndex。可能是第一次调用时,Repeater.Items没有项目。第二次,有一个项目(索引= 0)。第三次,它有2个项目(索引0和1)。

参考:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.onitemdatabound(v=vs.110).aspx

答案 1 :(得分:2)

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx

OnItemDataBound是在 之后调用的,每个 项都是数据绑定,而不是绑定所有数据。我认为你误解了这个事件的作用。

所以首先循环没有项目,第一项后0,然后0,1后。您将不得不调试它以查看它正在做什么,但这看起来是个问题。

答案 2 :(得分:2)

为绑定的每个项触发OnItemDataBound事件。所以你应该做下面的事情

protected void getOverlays(object sender, RepeaterItemEventArgs e) {
    Response.Write(e.Item.ItemIndex);
}
相关问题