【问题标题】:Menu Control in Master Page fails to use CSS styles母版页中的菜单控件无法使用 CSS 样式
【发布时间】:2012-07-04 19:06:33
【问题描述】:

我正在开发一个使用 ASP.NET 3.5 和 C# 的 Web 应用程序。在结构上,我有一个带有菜单控件的母版页。该控件用作我的导航,它从 SiteMapDataSource 控件和相应的 Web.sitemap 文件中获取其项目。

问题是当您指定 CssClass 属性时,某些样式无法正确呈现。更具体地说, selected 和 hover 样式不响应 css 样式。考虑下面的代码:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>A webpage</title>
</head>
<body>
<form id="form1" runat="server">
<div id="page">
    <asp:Menu 
        ID="navMenu" 
        Orientation="Horizontal"
        StaticMenuStyle-CssClass="staticMenu"
        StaticMenuItemStyle-CssClass="staticMenuItem"
        StaticSelectedStyle-CssClass="staticSelectedItem"
        StaticHoverStyle-CssClass="staticHoverItem"
        runat="server">
    </asp:Menu>
    <asp:SiteMapDataSource ID="srcSiteMap" runat="server" ShowStartingNode="false" />
    <br />
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>

假设我有一个相应的 .css 文件,其中包含以下内容:

.staticMenuItem { background-color:Red; }
.staticSelectedItem { background-color:Green; }
.staticHoverItem { background-color:Blue; }

将会发生的情况是,我的项目背景将正确显示为红色,但我选择的项目不会显示为绿色,并且我将鼠标悬停在的项目不会显示为蓝色。无论我是在母版页的头部还是在 web.config 文件中指定的默认主题的外部文件中包含样式,这似乎都是正确的。

如果我像这样在 asp.net xml 中指定样式:

<asp:Menu
    ID="navMenu"
    Orientation="Horizontal"
    runat="server">
<StaticSelectedStyle 
    BackColor="Green"
    Font-Underline="True"
    Font-Bold="True" />
<StaticHoverStyle 
    BackColor="Gray" />
</asp:Menu>

它在 Firefox 中似乎可以正常工作,但该样式从未嵌入到 Internet Explorer 的 html 中。奇怪。

是否有人对导致此问题的原因以及如何巧妙地解决此问题有任何见解?我知道我可能能够以编程方式确定当前页面并手动选择相应的菜单项,以便它接收正确的样式类,但在我求助于破解 C# 和 Javascript 来修复此功能之前,我愿意接受想法.

【问题讨论】:

    标签: c# asp.net navigation master-pages


    【解决方案1】:

    很奇怪,当我使用我在新解决方案中提供的代码时,它运行良好。显然,我最初的解决方案是使用 ASP.NET 4.0,无论出于何种原因,复制此处给出的代码都不起作用。我尝试将 ASP.NET 3.5 指定为 Visual Studio 中的编译器,结果你瞧,它奏效了。当我再次将 ASP.NET 4.0 设置为编译器时,它起作用了。

    经过仔细检查,我发现将 Visual Studio 2010 解决方案从 ASP.NET 3.5 转换为 ASP.NET 4.0 会将 web.config 文件中的 controlRenderingCompatibilityVersion 属性设置为“true”。这会导致菜单控件呈现为表格(就像它在 3.5 中所做的那样)而不是列表项(就像它在 4.0 中所做的那样)。删除此属性再次破坏了页面,并将菜单控件的 RenderingMode 属性设置为“table”修复了它。

    所以,总而言之,这个错误似乎只存在于 ASP.NET 4.0 中,菜单控件被呈现为列表,至少对我来说是这样。如果其他人有进一步的见解,我很乐意听到。

    【讨论】:

    • 更奇怪的是,我遇到了这个问题,但仅在我的生产环境中 - 两个环境都有 .NET 4 但生产使用 IIS7 - 这是我能解决的唯一区别!不错的答案,我会把它设置为“表格”,看看是否能解决它
    【解决方案2】:

    遇到了同样的问题,把web.config - controlRenderingCompatibilityVersion从3.5改成了4.0,问题就解决了。

    我认为它是在添加 AjaxControlKit 之后发生的。

    这行得通:

    <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
        <controls>
            <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
        </controls>
    </pages>      
    

    【讨论】:

      【解决方案3】:

      我使用和你完全一样的开发环境,我可以制作 默认情况下具有红色项目的菜单,在悬停时变为蓝色,在悬停时变为绿色 选择。我已将主题嵌入到 web.config 文件中。 我用的是IE 8,会不会是IE版本的问题? 问候

      【讨论】:

      • 显然我的 Visual Studio 2010 配置有问题;从那以后,我已经能够使用 IIS7 的 xml 首选项在 IE8 中正确呈现样式。我得把它清理干净。我当然感谢你调查它。但是,我仍然无法将外部 css 类用于选定和悬停样式,而不会在呈现菜单控件时将一些与 Asp.net 的命名方案不同的东西拼凑在一起。您是否在 xml 表单中指定了样式,或者您是否能够使外部样式表正常工作?
      • 我使用了外部样式表。但是当然,我仍然使用 VS 2008 并且在这个方向上没有任何问题;)有趣的问题。
      【解决方案4】:

      在 ASP.NEt 4.0 中,它把实际的“selected”属性放在 a 标签的类中。所以我所做的就是使用 CSS 来定位它,并确保我设置了我的标签的大小、填充等而不是 li,它就像一个梦一样工作。

      【讨论】:

        【解决方案5】:

        悬停在 IE6 中不起作用...这可能是您的问题。它可以用 javascript 修复...http://www.robspangler.com/blog/hover-pseudo-class-bug-fix-for-ie6/

        【讨论】:

        • 同时在 Firefox/ID 中打开您的页面...检查您的菜单项是否被分配了正确的类/样式(选择查看页面源代码)。您可以更进一步,使用 Firebug 查看正在应用哪些样式以及正在覆盖哪些样式。
        • 嗯,由于 asp.net 经常使用 javascript 呈现控件并考虑到用户的浏览器,这似乎是一个相当奇怪的疏忽,但如果没有其他办法,就必须这样做。此外,经过仔细检查,即使我设置了 Menu 控件的 StaticSelectedStyle-CssClass 属性,它也没有在 html 中正确设置。相反,它只是一个名为“selected”的类,将样式应用于#navMenu a.selected 实际上会设置所选页面的样式。多么不协调。尽管如此,我仍然希望有比 javascript 和不一致的 css 更好的方法。
        猜你喜欢
        • 1970-01-01
        • 2015-01-03
        • 2014-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 2011-03-17
        相关资源
        最近更新 更多