相关问题:Get All Web Controls of a Specific Type on a Page
在上面的问题中,我问我如何能够获得所有控制,像魅力一样,但是有些东西不太合适,所以我认为它可能是我。我有以下代码,但它不是在操纵页面上的控件,但在我的理论中它应该可以工作。
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的快速解决方案,下面是下拉框中的长文本缩减。
答案 0 :(得分:9)
Page_Load
经常发生得太快; Page_PreRender
是实际为浏览器呈现页面HTML之前的最后一刻,在许多情况下是在用户控件上设置属性的最佳位置。
这是因为在Web表单(页面)生命周期中,页面中有其他事件(以及页面中包含的用户控件...),有时删除/替换/覆盖( 真的)这些属性因此将这些属性提供给浏览器的唯一方法是在Page_PreRender.
答案 1 :(得分:9)
实际上,在某些情况下,即使PreRender
也可能过早(例如,在使用DropDownList
的控件进行数据绑定期间,您可能会在控件树中添加DataSourceID
个控件。
还有两个可能更合适的事件:
PreRenderComplete。此时,将创建所有控件并准备好呈现页面。
SaveStateComplete。保存视图状态和控制状态后发生。您在此处所做的任何更改都不会保留以查看状态。
在您的示例中(添加客户端属性),我将使用SaveStateComplete
事件来避免不必要的视图状态膨胀。