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