我想截取页面上OnInit
个(众多)控件。目的是在运行时设置控件的各种属性。截取在ViewState
跟踪控件之前发生是至关重要的,因为有问题的属性值不会存储在ViewState
中(以节省空间)。
有许多简单的技术可以在运行时设置属性,但它们无法满足我的需求,因为它们是在ViewState
跟踪Control
启动后发生的。 (一种这样的技术的一个例子是在Page
的{{1}}方法中循环遍历Page
控制树中的控件。这跟OnInit
跟踪太晚了已经开始对控件添加到树中。)
我接近一个完美的解决方案。我将以下内容放在ViewState
文件中:
.browser
以下是<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.WebControl" adapterType="TestClassLibrary.TestWebControlAdapter, TestClassLibrary"/>
</controlAdapters>
</browser>
</browsers>
的源代码:
TestWebControlAdapter
我看到的问题是适配器无法堆叠,因此这将覆盖可能以其他方式应用于此控件的任何其他适配器。
有关解决此问题的更好方法的任何想法?请注意,虽然它可以工作,但我认为实际上在using System;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.Adapters;
namespace TestClassLibrary
{
public class TestWebControlAdapter : WebControlAdapter
{
protected override void OnInit(EventArgs e)
{
if (this.Control is Button)
{
((Button)this.Control).Text = "Test Adapter";
}
base.OnInit(e);
}
}
}
中为标记中的所有控件添加了一个Init
事件处理程序,并且需要更通用的解决方案。