Удалить, заменить или отключить динамически сгенерированный js-код ASP.Net - PullRequest
1 голос
/ 16 июля 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

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

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

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

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

1 голос
/ 10 октября 2017

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

Как и 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 является нулем.

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 меню веб-форм.

...