当迭代使用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是实际的推文。 任何人都可以在代码中看到问题吗?
答案 0 :(得分:3)
这不是剃刀。你正在混合不同的做事方式,而且没有一个是正确的。
更多内容如下:
<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 %>