我在里面使用带有DataList元素的UpdatePanel。我想每10个secunds更新DB中的内容。我注意到只有在回发后才会发生更新。我做了像
这样的代码 <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:DataList ID="lstComputers" runat="server" DataKeyField="ComputerID" DataSourceID="ComputersDataSource"
OnItemDataBound="lstComputers_ItemDataBound" OnItemCommand="lstComputers_ItemCommand">
<HeaderTemplate>
// Header data
</HeaderTemplate>
<ItemTemplate>
// Item template
</ItemTemplate>
</asp:DataList>
<asp:UpdateProgress ID="UpdateProgress2" runat="server">
<ProgressTemplate>
<img border="0" src="images/loading.gif" />
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
在代码背后我尝试使用RaisePostBackEvent
方法,但得到了堆栈溢出异常......
protected void Timer1_Tick(object sender, EventArgs e)
{
this.RaisePostBackEvent(Timer1, "");
}
答案 0 :(得分:3)
请记住,所有代码隐藏仅在服务器上执行。因此,如果Timer1_Tick()方法正在运行,那么你的Timer 提出了一个PostBack。
你得到运行该方法的StackOverflowException的原因是因为它无限地调用自身。您需要将更新代码放在该方法中,而不是以递归方式再次调用它。
答案 1 :(得分:0)
看一下setTimeout()和setInterval()javascript函数。这一切都需要在客户端而不是服务器端发生。
答案 2 :(得分:-3)
protected void Timer1_Tick(object sender, EventArgs e)
{
lstComputers.DataBind();
}
解决了数据重装的问题