我有一个基于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状态。
答案 0 :(得分:1)
这一点是你必须关注的一点。
if(!PostBack)
parseXmlFile();
您只是第一次创建控件,因此回发时的控件,当Tick触发时,控件不会再次显示。
两种解决方案。
1.再次解析XmlFile
2.要保存视图状态的所有控件,所以在回发时,控件将从视图状态重新创建。
我更喜欢保留xmlfile,并且只是第一次重新创建它们。
如果你想知道为什么控件不再存在,因为它们没有写在页面数据面的任何地方,只是在html部分上呈现,但是html部分从后面的代码中是未知的,只有数据并且视图状态之类的后期数据可以通过后面的代码识别。所以在回发后,后面的代码必须再次渲染页面,但是这个控件现在再次为后面的代码所知,并且需要重新创建它们,以及通过在第一个位置创建它们的相同函数,以太,通过获取它们的保存视图状态。