迭代ArrayList总是错过1个条目

时间:2015-06-17 11:26:39

标签: c# asp.net razor

当迭代使用Razor在我的WebForm上显示的字符串ArrayList时,实际上从未显示过一个条目。

代码:

<asp:UpdatePanel ID="TweetUpdatePanel" runat="server">
    <ContentTemplate>
        <%           
            ArrayList alList = GetLatest();
        %>
        <ul>
            <%
              foreach (string tweet in alList)
              {
            %>
            <li>
                <asp:Literal ID="thisLiteral" runat="server"></asp:Literal>
                <% thisLiteral.Text = tweet; %>
            </li>    
            <%    
              } 
             %>
        </ul>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick">
</asp:Timer>

计时器事件中没有任何内容仅用于刷新updatepanel 因此,如果alList包含4个项目,则会显示。   - 推特1   - 推文2   - 推特3

推文1 - 3是实际的推文。 任何人都可以在代码中看到问题吗?

2 个答案:

答案 0 :(得分:3)

这不是剃刀。你正在混合不同的做事方式,而且没有一个是正确的。

  • 数据检索应该在代码隐藏中,或者在DataSource中。
  • 您正在创建多个具有相同ID的ASP.Net文字
  • 你应该使用数据转发器来做这种事情

更多内容如下:

<asp:UpdatePanel ID="TweetUpdatePanel" runat="server">
    <ContentTemplate>
        <ul>
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <asp:Literal ID="thisLiteral" runat="server" Text='<%# Bind("Name") %>'></asp:Literal>
                </ItemTemplate>
            </asp:Repeater>
        </ul>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick">
</asp:Timer>

在您的代码中,在页面加载:

this.Repeater1.DataSource = GetLatest();

答案 1 :(得分:1)

            <asp:Literal ID="thisLiteral" runat="server"></asp:Literal>
            <% thisLiteral.Text = tweet; %>
哇,这很聪明。我从未见过这个。我不认为在页面上的代码块中修改ASP.NET控件是个好主意。

这两个陈述的顺序相反。这就是错误。

很多会更好:

 <%= tweet %>