何时在页面加载上使用preender

本文关键字:preender 加载 何时 | 更新日期: 2023-09-27 18:08:24

相关问题:在一个页面上获取特定类型的所有Web控件

在上面的问题中,我问我是如何得到所有的控制,像魅力一样工作,但有些东西不太适合,所以我想可能是我。我有下面的代码,但它没有操纵页面上的控件,但在我的理论,它应该工作。

List<DropDownList> allControls = new List<DropDownList>();
ControlEnhancer.GetControlList<DropDownList>(Page.Controls, allControls);
foreach (DropDownList childControl in allControls)
        {
            foreach (ListItem li in childControl.Items)
            {
                li.Attributes.Add("title", li.Text);
            }
            childControl.Attributes.Add("onmouseover", "this.title=this.options[this.selectedIndex].title");
        }

这是代码,GetControlList()代码,你可以从相关的问题,它显示了如何得到所有的控件,这只是我的操作。我试图得到所有下拉列表列表,并添加一个标题给他们,所以我可以有一个工具提示。

这是IE8及以下的一个快速修复,在下拉框中剪切长文本。

何时在页面加载上使用preender

Page_Load往往发生得太快;Page_PreRender是页面的HTML实际呈现给浏览器之前的最后一刻,在许多情况下是设置用户控件属性的最佳位置。

这是因为在web表单(页面)生命周期中,页面(以及页面中包含的用户控件…)中有其他事件,有时删除/替换/覆盖 (真的)这些属性,因此您可以将这些属性添加到浏览器的唯一方法是在所有其他生命周期事件被触发和处理后附加它们,在Page_PreRender.

实际上,即使PreRender在某些情况下也可能太早(例如,您可以在使用DataSourceID的控件的数据绑定期间将DropDownList控件添加到控件树中)。

还有两个事件可能更合适:

  • PreRenderComplete。至此,所有控件都创建好了,页面也可以呈现了。

  • SaveStateComplete。在保存视图状态和控件状态后发生。您在这里所做的任何更改都不会被持久化到viewstate。

在您的示例中(添加客户端属性),我将使用SaveStateComplete事件来避免不必要的视图状态膨胀