剛剛遇到(或剛剛發現)類似的問題與我們的應用程序中的遺留代碼。
像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錯誤ID元素在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的測試不良影響。顯然,如果在頁面上使用相同的ID創建元素,會出現問題。不知道這有多可能,除非我們重做我們的應用程序菜單。我認爲這不比重寫webforms Menu javascript更糟糕/風險更大。
我曾考慮過這個問題,但由於我綁定了一個Sitemap數據源,因此我想避免通過數據遞歸來生成應該是「開箱即用」的東西。也就是說,如果我沒有得到我需要的結果,我可能會重新考慮。 – 2010-07-16 11:21:09