3

我正在使用 Visual Studio 2010 和 ASP.NET 4.0 将菜单控件呈现为 HTML 列表,因此我可以使用 CSS 对其进行样式设置。这是我在下面使用的代码

<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 中的任何脚本。如何防止此脚本在页面的最终标记中呈现?

4

6 回答 6

8

如果您只想使用 IncludeStyleBlock 属性,您可以告诉菜单不要自己设置样式

默认情况下,它打开“真”

<asp:Menu IncludeStyleBlock="False" />
于 2013-09-14T23:12:46.237 回答
5

在你的 CSS 上使用 !important

于 2011-11-15T18:59:01.427 回答
4

我创建了一个自定义菜单(派生自 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);
    }
}

那成功了。

于 2011-10-20T14:54:43.383 回答
2

您无法更改Menu控件的开箱即用功能。但是,您可以创建自己的控件或使用CSS 控件适配器工具包

于 2010-06-19T10:14:29.577 回答
1

我尝试asp:menu使用自定义类覆盖 ,但仍然没有学会如何简单地从 、 和标签中删除所有属性ulli以便a我可以将自己的 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 行不起作用。它应该,但不是。:(

于 2015-05-05T16:10:45.037 回答
0

我通过删除内联样式并通过 jQuery 更改一些类名来管理它。当然,您可以重新设计每个元素的样式,但这只会产生很多不必要的 css 代码。

如果您想从 li、a、ul 和 div 中删除这些内联样式,请使用这个:

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

其次,您可以更改这些类名,例如:

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

而且我认为这是在页面加载后使用此脚本的最佳方式。

于 2014-09-02T06:34:26.840 回答