Переопределение защищенных внутренних методов

Я переписываю веб-приложение для ASP.Net 4.0 и включил элемент управления Menu (естественно, привязанный к файлу SiteMap). Хотя мне нравится новое свойство RenderingMode, я ненавижу тот факт, что оно автоматически включает некоторый javascript внизу вашей страницы для анимации меню.

Я бы предпочел больший контроль с помощью jQuery, но отключить его оказалось очень сложно. С некоторой помощью очень сильного нападающего я прошел до точки, где я обнаружил, что элемент управления ASP.Net 4.0 Menu имеет внутренний метод OnPreRender:

internal void OnPreRender(EventArgs e, bool registerScript);

Как мне переопределить этот метод, чтобы я мог вызывать:

base.OnPreRender(e, false);

При попытке в данный момент я получаю сообщение об ошибке от Visual Studio о том, что «Нет перегрузки для метода« OnPreRender »не принимает 2 аргумента».


person Phil.Wheeler    schedule 15.07.2010    source источник
comment
вы можете обойти его на стороне клиента управление меню asp net"> stackoverflow.com/questions/3425498/   -  person Shahul Hameed    schedule 16.05.2013
comment
stackoverflow. ком/вопросы/3425498/   -  person Shahul Hameed    schedule 16.05.2013


Ответы (2)


Вы должны иметь возможность ссылаться на protected internal методы, поскольку они protected или internal. Если метод просто internal, вам может не повезти.

Глядя на элемент управления меню ASP.NET 4, он имеет только одно переопределение OnPreRender:

protected internal override void OnPreRender(EventArgs e);

Таким образом, вы должны иметь возможность переопределить его. Не уверен, откуда берется OnPreRender(EventArgs e, bool registerScript) (возможно, это internal), но тот факт, что базовый класс этого не делает (или недоступен), - это ваша проблема.

person Igor Zevaka    schedule 15.07.2010
comment
Это просто внутреннее. Думаю, это конец пути. - person Phil.Wheeler; 15.07.2010
comment
Я предполагаю, что альтернатива состоит в том, чтобы не называть базу PreRender, а писать свою собственную версию в переопределении. Возможно, что-то вроде Reflector поможет вам понять, что именно делает OnPreRender(EventArgs e, bool registerScript). - person Igor Zevaka; 15.07.2010

Не прямой ответ, но довольно тривиально выгрузить содержимое любого IHeirarchicalDataSource, такого как файл карты сайта, в <ul>, который любое количество продуктов меню jquery может пережевать и сделать чистым.

person Wyatt Barnett    schedule 15.07.2010