2012-03-07 77 views
0

问题: 我加载基于在父页RadTabstrip控件中选定的选项卡的几个用户控件之一。我捕获了选定的选项卡,并将其分配给OnTabClick事件中的Session变量,以便在每个用户控件中使用,以确定是否需要呈现该特定控件。你可以强制页面渲染后加载

原因是因为每个用户控件都会查询一个数据库来渲染不同的图表,而且我不希望每次回发到服务器都会发生不必要的处理。我想补充一点,每个用户控件在其标记中都有几个标签,它们只能根据从数据库中检索到的内容获取在运行时期间分配的文本值。

当我加载主页面时,每个用户控件都会检查选中的选项卡变量,并且在该范围内一切正常。 (索引0的第一个选项卡没有图表)

问题是当我选择一个具有用户控件的选项卡时,从数据库中获取数据并构建图表的适当代码正常工作,但TEXT值标记中的标签控件不会显示在页面上,尽管TEXT值是在数据被重新获取的同时在代码隐藏中设置的。

如果我执行相同页面的回发,将显示Label控件的TEXT值。

我相信这是因为其中包括标记的渲染页面生命周期的第一个阶段是不触发用户控件上的初始加载,但在随后的重新加载或页面的刷新会被解雇。

有没有办法解决这个问题?点击数据库后,我正在调用Render事件,但我可能会基于我的想法离开。

任何人都可以提供一些建议或潜在的解决方案?

感谢

+1

它绝对听起来好像你的用户控制数据被映射到用户控制标签到晚了。何时以及如何创建用户控件?这听起来像你在OnTabClick方法中这样做,这应该不是问题,因为用户事件在Page_PreRender()之前触发,这是您发送给客户端之前修改页面的最后机会事件。 – 2012-03-07 15:51:40

+0

UserControl是静态的,并且已经在网站中创建。层次结构是:主页面,子主页面,ASPX页面,然后是在ASPX页面中使用标签名称和前缀注册并在div标签中添加到该页面的用户控件。当站点加载ASPX页面时,加载并为每个UserControl呈现标记。如果我删除了条件检查并仅允许构建所有控件,则问题不会发生;但是,我有其他问题不断查询每个UserControl在回发数据库。表现的杀手。 – Mark 2012-03-07 16:18:59

回答

1

我从来没有能够解决这阻止标签的文本出现,直到我的网页手动刷新后,让我走近这个问题从不同的角度后期绑定问题。如果用户选择了相应的选项卡,我仍然保留只允许每个用户控件的数据填充的逻辑,但我将嵌入在我的标记中的内嵌代码移到了我的代码隐藏文件中。

我并不完全确定标记与代码隐藏的处理顺序,所以我研究并发现,首先处理在aspx页面中声明的任何东西,然后创建对象然后在后面的代码中进行访问或更新。 因此,通过这些信息,我完全分离了这两者,并能够在标签上呈现文本而没有任何问题。

我仍然想知道强制页面调用Render事件来模拟或模仿初始Page_Load之后的手动回发的适当方法,但与Page Cycle的流程相比更容易,可能是更好的做事方式。

0

解决您的问题的一种方法是考虑使用“更新面板”。它将允许您呈现整个页面,然后在事件上仅刷新更新面板的区域。

通常我会喜欢这个功能出于性能原因,但有一个问题。某些浏览器(例如Safari和Opera版本)无法正确呈现这些内容。您的应用程序是供消费者通用的Web应用程序吗?如果是这样,你可能需要考虑在同一页面上刷新整个页面并传递用户数据(除非Opera /其他浏览器已经修复了这个缺点 - 我还没有在4个月内进行过测试)。