Перехватывать контроль ASP.NET OnInit - PullRequest
1 голос
/ 28 августа 2009

Я бы хотел перехватить OnInit из (многочисленных) элементов управления на странице. Цель состоит в том, чтобы установить различные свойства элементов управления во время выполнения. Крайне важно, чтобы перехват произошел до начала ViewState отслеживания для элемента управления, потому что рассматриваемые значения свойств не должны храниться в ViewState (для экономии места).

Существует много простых методов установки свойств во время выполнения, но они не соответствуют моим потребностям, поскольку они происходят после ViewState отслеживания для запуска Control. (Примером одного такого метода является циклический просмотр элементов управления в дереве элементов управления Page во время метода 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 в Page для всех элементов управления в разметке является чрезмерным и требует более общего решения.

1 Ответ

0 голосов
/ 28 августа 2009

Чуть больше, чем вы хотите, но, возможно, PostSharp будет вам интересно. Вы можете потенциально подключиться к этому событию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...