你能在它之后强制页面渲染吗';s已加载

本文关键字:加载 之后 | 更新日期: 2023-09-27 18:27:14

问题:我正在加载基于父页面上RadTabstrip控件中所选选项卡的几个用户控件中的一个。我已经捕获了Selected选项卡,并将其分配给OnTabClick事件中的Session变量,以便在每个用户控件中使用,以确定是否需要呈现该特定控件。

原因是每个用户控件都会查询一个数据库来呈现不同的图表,我不希望每次返回服务器的帖子都会发生不必要的处理。我想补充的是,每个用户控件的标记中都有几个标签,这些标签只会在运行时根据从数据库检索到的内容分配文本值。

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

问题是,当我选择一个具有用户控件的选项卡时,从数据库中获取数据并构建图表的适当代码运行良好,但标记中Label控件的TEXT值不会显示在页面上,尽管在检索数据的同时在code Behind中设置了TEXT值。

如果我对同一页执行回邮,则会显示Label控件的TEXT值。

我相信这是因为页面生命周期的第一阶段,包括标记的渲染,并不是在用户控件的初始加载时启动的,而是在页面的后续重新加载或刷新时启动的。

有办法解决这个问题吗?我认为在访问数据库后调用Render事件是可行的,但我可能偏离了我的想法。

有人能提供一些建议或潜在的解决方案吗???

感谢

你能在它之后强制页面渲染吗';s已加载

我一直无法解决延迟绑定问题,该问题导致标签文本在手动刷新页面后才出现,因此我从不同的角度处理了这个问题。我仍然保留了这样的逻辑,即只有当用户选择了每个用户控件的相应选项卡时,才允许填充它们的数据,但我将嵌入标记中的内联代码移到了代码隐藏文件中。

我不能100%确定标记与代码隐藏的处理顺序,所以我进行了研究,发现在aspx页面中以声明方式完成的任何操作都是先处理的,对象是在代码隐藏中访问或更新之前创建的。因此,有了这些信息,我完全将两者分开,并能够在没有任何问题的情况下将文本呈现在标签上。

我仍然希望知道强制页面调用Render事件的适当方法,以模拟或模仿初始page_Load之后的手动Postback,但按照页面循环的流程进行操作要容易得多,而且可能是更可取的方法。

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

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