2010-07-16 84 views
1

我正在使用一些.Net 4.0 webforms控件,如Menu控件,雖然我認爲現在可以聲明呈現控件的方式(即,作爲任一表或div的),我不能關掉它管理這些控件懸停事件,例如在自動的-包含的JavaScript:刪除,替換或禁用動態生成的ASP.Net js代碼

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

這出現在每個擁有這種頁面的底部一個控件。

由於沒有辦法真正將其切換,禁用此腳本,覆蓋它或以其他方式渲染它無效的最佳方法是什麼,以便我可以在自己的位置定義自己的jQuery方法?

回答

2

那麼,你可以嘗試是包括一些JavaScript後的Web表單腳本包含的是執行以下操作:

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

基本上,覆蓋web表單菜單的javascript什麼也不做。但要小心,特別是如果你已經使用這些菜單的現有項目工作,因爲他們的JavaScript將不再工作。

就我個人而言,我建議使用像Repeater或ListView這樣的「精簡」控件創建自己的菜單標記,CSS和JavaScript。這樣可以避免大部分這些問題,並且您可以對輸出進行更多的控制。

+0

我曾考慮過這個問題,但由於我綁定了一個Sitemap數據源,因此我想避免通過數據遞歸來生成應該是「開箱即用」的東西。也就是說,如果我沒有得到我需要的結果,我可能會重新考慮。 – 2010-07-16 11:21:09

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」所以,我們看到一個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更糟糕/風險更大。