2010-07-16 6 views
1

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

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

Это появляется в нижней части каждой страницы, которая владеет такими контроль.

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

ответ

2

Ну, что вы можете попробовать это включить некоторые JavaScript после того, как сценарии WebForms включены, что делает следующее:

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

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

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

+0

Я думал об этом, но поскольку я привязываюсь к источнику данных Sitemap, я хочу избежать проблем с рекурсией данных, чтобы создать что-то, что должно быть «готовым». Тем не менее, если я не получу результаты, которые мне нужны, я могу пересмотреть. –

1

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

Как и 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» так, мы видим яваскрипта ошибку в MenuStandards.js, разрешающем tagName === 'DIV'. этот.элемент равен нулю.

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

Смежные вопросы