1

我有一个 ASP.NET UpdatePanel 根据定时器的 Tick 事件触发刷新。

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

if(!Page.IsPostBack)
  parseXmlFile();

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

如果Tick我调用一个自定义方法RefreshData(),该方法又通过 SqlDataSource 将数据重新绑定到 GridView。

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

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

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

4

1 回答 1

1

这一点是你必须关注的。

if(!PostBack)
  parseXmlFile();

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

两种解决方案。
1. 再次解析 XmlFile
2. 保存视图状态上的所有控件,因此回发控件是从视图状态重新创建的。

我更喜欢保留 xmlfile 并像第一次一样重新创建它们。

如果你想知道为什么控件不再存在,因为它们没有写在页面数据端的任何地方,只是呈现在 html 部分,但是 html 部分从后面的代码中是未知的,只有数据和帖子像视图状态这样的数据可以通过后面的代码来识别。所以在回发时,后面的代码必须再次渲染页面,但是这个控件现在对于后面的代码是未知的,需要重新创建它们,以太通过首先创建它们的相同函数,以太通过保存它们视图状态。

于 2012-06-06T12:24:19.913 回答