更新面板和AJAX计时器 - 删除每个Tick事件的所有控件

时间:2012-06-06 12:17:40

标签: asp.net

我有一个基于Timer的Tick事件触发刷新的ASP.NET UpdatePanel。

该页面解析自定义XML文件并动态插入UserControls(包含GridViews)。这是从Page_Load方法执行的。

if(!Page.IsPostBack)
  parseXmlFile();

第一次加载页面时,所有控件都按预期显示。问题是第一次触发计时器Tick事件时,所有UserControl都会消失。

Tick事件中,我调用自定义方法RefreshData(),后者又通过SqlDataSource将数据重新绑定到GridView。

   public void RefreshData() {
       GridView1.DataBind();
   ...

也许我不明白AJAX在ASP.NET中是如何工作的。

我只想解析XML文件一次(这会在页面中创建所有UserControl)。从这一点来说,我只想刷新GridView中包含的数据并更改GridView的Visibility状态。

1 个答案:

答案 0 :(得分:1)

这一点是你必须关注的一点。

if(!PostBack)
  parseXmlFile();

您只是第一次创建控件,因此回发时的控件,当Tick触发时,控件不会再次显示。

两种解决方案。
 1.再次解析XmlFile
 2.要保存视图状态的所有控件,所以在回发时,控件将从视图状态重新创建。

我更喜欢保留xmlfile,并且只是第一次重新创建它们。

如果你想知道为什么控件不再存在,因为它们没有写在页面数据面的任何地方,只是在html部分上呈现,但是html部分从后面的代码中是未知的,只有数据并且视图状态之类的后期数据可以通过后面的代码识别。所以在回发后,后面的代码必须再次渲染页面,但是这个控件现在再次为后面的代码所知,并且需要重新创建它们,以及通过在第一个位置创建它们的相同函数,以太,通过获取它们的保存视图状态。