Удалить, заменить или отключить динамически генерируемый код ASP.Net js

Я работаю с несколькими элементами управления веб-формами .Net 4.0, такими как элемент управления Menu, и хотя я думаю, что это здорово, что теперь я могу объявить способ отображения элементов управления (т. е. как таблицы или элементы div), я не могу отключить автоматически включенный javascript, который управляет событиями наведения для этих элементов управления, например:

new Sys.WebForms.Menu({ element: 'NavigationMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false }

Это отображается внизу каждой страницы, которой принадлежит такой элемент управления.

Учитывая, что на самом деле это невозможно отключить, каков наилучший подход к отключению этого скрипта, переопределению его или каким-либо другим образом делает его бессильным, чтобы я мог определить свои собственные методы jQuery вместо него?


person Phil.Wheeler    schedule 16.07.2010    source источник


Ответы (2)


Что ж, вы можете попробовать включить некоторый javascript после включения сценариев Webforms, который делает следующее:

Sys.WebForms.Menu = function() {};

По сути, это переопределяет javascript меню веб-форм, чтобы ничего не делать. Однако будьте осторожны, особенно если вы работаете над существующим проектом, который уже использует эти меню, так как они больше не будут работать.

Лично я бы порекомендовал создать собственную разметку меню, css и javascript, используя гораздо «более компактный» элемент управления, такой как Repeater или ListView. Это позволит избежать большинства этих проблем, и у вас будет гораздо больше контроля над выводом.

person Sean Amos    schedule 16.07.2010
comment
Я думал об этом, но поскольку я привязываюсь к источнику данных Sitemap, я хочу избежать проблем с повторным просмотром данных для создания чего-то, что должно быть готовым. Тем не менее, если я не получу нужных мне результатов, я могу пересмотреть свое решение. - person Phil.Wheeler; 16.07.2010

Только что столкнулся (или только что заметил) с похожей проблемой с устаревшим кодом в нашем приложении.

Подобно Phil.Wheeler, также использует источник данных Sitemap. Не уверен, что изменение режима рендеринга на 3.5 — это хорошо для нас, и хак скрипта для переопределения Sys.WebForms.Menu не сработал.

Проблема:

Этот код автоматически вставляется на каждую страницу aspx:

<script type='text/javascript'>new Sys.WebForms.Menu({ element: 'ctl00_MainNavMenu', disappearAfter: 500, orientation: 'horizontal', tabIndex: 0, disabled: false });</script>

Ни на одной из наших страниц нет элемента с идентификатором ct100_MainNavMenu, поэтому мы видим ошибку javascript в MenuStandards.js, разрешающую tagName === 'DIV'. this.element имеет значение null.

Sys.WebForms.Menu = function(options) {
    this.items = [];
    this.depth = options.depth || 1;
    this.parentMenuItem = options.parentMenuItem;
    this.element = Sys.WebForms.Menu._domHelper.getElement(options.element);
    if (this.element.tagName === 'DIV') {
        var containerElement = this.element;
        this.element = Sys.WebForms.Menu._domHelper.firstChild(containerElement);
        this.element.tabIndex = options.tabIndex || 0;
        options.element = containerElement;
        options.menu = this;
        this.container = new Sys.WebForms._MenuContainer(options);
        Sys.WebForms.Menu._domHelper.setFloat(this.element, this.container.rightToLeft ? "right" : "left");
    }
    else {
        this.container = options.container;
        this.keyMap = options.keyMap;
    }

Добавление следующего в наш мастер-файл ASPX, так как последний html перед тегом, кажется, работает (это избавляет от проблемы):

<div id="ctl00_MainNavMenu" style="display:none">
    <div id="neededToPreventSecondErrorAt_tabIndex"></div>
</div>

Отрендеренный HTML выглядит следующим образом:

<div id="ctl00_MainNavMenu" style="display: none; float: left;">
    <div tabindex="0" role="menubar" class="static" style="position: relative; width: auto; float: left;"></div>
</div>

Никаких негативных последствий не наблюдается ни на одной из наших страниц ASPX, тестирование в IE, FF и Chrome. Очевидно, что возникнут проблемы, если на странице когда-либо будет создан элемент с таким же идентификатором. Не уверен, насколько это вероятно, если мы не переделаем меню нашего приложения. Я не думаю, что это хуже / рискованнее, чем переопределение javascript меню веб-форм.

person mobill    schedule 09.10.2017