1
我想拦截页面上(众多)控件的OnInit
。目的是在运行时设置控件的各种属性。在ViewState
开始跟踪控制之前进行截取非常重要,因为所讨论的属性值不会存储在ViewState
(以节省空间)中。截取ASP.NET控件OnInit
在运行时有很多简单的技术来设置属性,但它们不符合我的需求,因为它们是在ViewState
追踪Control
开始后发生的。 (在Page
的OnInit
方法期间,Page
的控制树中的控件循环通过Page
的控制树中的控件,这是一个例子,这是因为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);
}
}
}
,我这个看到的问题是,适配器不能堆放,因此这将覆盖任何其他适用于此控件的适配器。
关于更好的方法来解决这个问题的任何想法?请注意,虽然它可以工作,但我认为实际上在Page
中为标记中的所有控件添加了一个Init
事件处理程序,并且需要更通用的解决方案。
我需要能够拦截内置控件上的OnInit,而不仅仅是我拥有源代码的控件。所以我不认为这会对我有很大的帮助。 – 2009-08-28 02:00:02