繁体   English   中英

foreach循环C#中的双零索引

[英]Double zero index in a foreach loop C#

这是我目前遇到的一个非常奇怪的问题。 我的代码中有一个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。

第一次迭代后,某种程度上我的索引被重置了,但是我从来没有遇到过这个问题,有人对此有解决方案,或者可以为我指出为什么索引失真的正确方向?

先感谢您。

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

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

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

在绑定了每个项目之后才调用OnItemDataBound,而不是在绑定所有数据时调用。 我认为您误会了此事件的作用。

因此,首先循环没有项目,第一个项目之后为0,然后为0,1。 您将不得不调试它以查看其作用,但这似乎是问题所在。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM