2010-06-19 49 views
3

我使用Visual Studio 2010和ASP.NET 4.0將Menu控件呈現爲HTML列表,以便使用CSS對其進行樣式設置。這裏是我用下面如何禁用JavaScript中的自定義菜單控件?

<asp:Menu ID="navlist" runat="server" Orientation="Horizontal" 
SkipLinkText="" ClientIDMode="Static" DataSourceID="MenuSource" 
MaximumDynamicDisplayLevels="0" IncludeStyleBlock="False" 
StaticDisplayLevels="2"> 
</asp:Menu> 

代碼這將產生以下HTML

<!-- URL shortened --> 
<script src="/WebResource.axd?...t=634066906994188146"type="text/javascript"></script> 

<div id="navlist"> 
    <ul> 
     <li><a href="link1.html">Link 1</a></li> 
     <li><a href="link2.html">Link 2</a></li> 
    </ul> 
</div> 

乍一看,這看起來正是我想要的。但是,如果我打開WebResource.axd,則會出現一大堆與該菜單相關的JavaScript代碼。這段代碼的一部分是將它自己的內聯樣式應用到列表中。使用Firebug的JavaScript已被執行之後,我可以查看HTML標記,它看起來是這樣的:

<div id="navlist" style="float: left;"> 
    <ul class="level1 static" tabindex="0" style="position: relative; width: auto; float: left;" role="menubar"> 
     <li role="menuitem" class="static" style="position: relative; float: left;"> 
      <a href="link1.html" class="level2 static" tabindex="-1">Link 1</a> 
     </li><li role="menuitem" class="static" style="position: relative; float: left;"> 
      <a href="link2.html" class="level2 static" tabindex="-1">Link 2</a></li> 
    </ul> 
</div> 

這些內嵌樣式最終影響到我的網頁的佈局。我不需要WebResource.axd中的任何腳本。如何防止該腳本在頁面的最終標記中呈現?

回答

2

您無法改變Menu控件的開箱即用功能。但是,您可以創建自己的控件或使用CSS Control Adapter Toolkit

+0

謝謝大衛,我會試着去另一個方向 – Cory 2010-06-21 05:08:56

3

我創建了一個自定義菜單(從System.Web.UI.WebControls.Menu派生)和取代的OnPreRender:

public class MyCustomMenu : System.Web.UI.WebControls.Menu 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
     // Don't call base OnPreRender 
     //base.OnPreRender(e); 
    } 
} 

該訣竅。

5

在你的CSS使用!重要

+0

這真的很簡單,非常感謝你的線索!我一整天都在爲同樣的問題而苦苦掙扎。 – 2016-03-31 23:20:12

8

你可以告訴菜單NOT風格本身,如果你只想使用IncludeStyleBlock屬性

默認情況下,它的開啓「真」

<asp:Menu IncludeStyleBlock="False" /> 
0

我通過刪除內聯樣式並通過jQuery更改某些類名來管理這個問題。當然,你可以重新設計每一個元素,但它只會產生大量不必要的CSS代碼。

利用這一點,如果你想從李一,UL和div的刪除這些內嵌樣式:

$("#navlist li,#navlist li a,#navlist ul,#navlist div").removeAttr('style'); 

其次,你可以改變這些類的名字,例如:

$("#from-this-element").removeClass(.remove-me).addClass('.new-class'); 

而且我覺得這是在頁面加載後使用此腳本的最佳方式。

0

我試圖重寫asp:menu與自定義類,但還沒有學會如何簡單地刪除從ullia標籤的所有屬性,這樣我可以申請我的CSS代碼到一個乾淨的列表。

Imports Microsoft.VisualBasic 
Namespace MCO 

Public Class MyCustomMenu 
    Inherits Menu 

     Protected Overrides Sub OnPreRender(e As EventArgs) 
      ' don't use this: 
      ' MyBase.OnPreRender(e) 

      ' but leaving this blank produces NO rendered menu 
     End Sub 
    End Class 
End Namespace 

我也曾嘗試jQuery的方法:

$("#navlist li,#navlist li a,#navlist ul,#navlist div").removeAttr('style'); 

但由於.NET webresource是最後東西跑,我發現jQuery的線沒有工作。它應該,但沒有。 :(

+0

考慮不使用'Menu'控件,而是使用純jQuery菜單小部件。 – 2015-05-05 16:19:36

+0

我已經制定出其他替代方案,當我需要做的是顯示一個菜單沒有任何過濾。有時候,我必須使用asp:菜單控件,因爲它通過活動目錄角色進行安全修整。我試圖用jQuery隱藏角色匹配(或不匹配)的鏈接而沒有成功。 – 2015-05-08 05:09:13

相關問題