2009-07-11 45 views
0

我使用里面有DataList元素的UpdatePanel。我想每10次更新DB的内容。我注意到只有在回发后更新发生。我不喜欢C#如何在Timer.Tick事件上引发PostBack?

<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> 

的代码在后面的代码我tryed使用RaisePostBackEvent方法,但得到堆栈溢出异常...

protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     this.RaisePostBackEvent(Timer1, ""); 
    } 

回答

3

请记住,所有的代码隐藏只在服务器上执行。因此,如果Timer1_Tick()方法正在运行,那么您的计时器引发回发。

你得到一个StackOverflowException运行该方法的原因是因为它只是无限调用自己。您需要将更新代码放在该方法中,而不是再次递归调用它。

0

看看setTimeout()和setInterval()javascript函数。这一切都需要发生在客户端,而不是服务器端。

-3
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    lstComputers.DataBind(); 
} 

问题解决了数据重装