【问题标题】:ASP.NET BulletedList disabled item not compliant with XHTML 1.0 Strict DOCTYPEASP.NET BulletedList 禁用项目不符合 XHTML 1.0 Strict DOCTYPE
【发布时间】:2010-11-19 04:35:26
【问题描述】:

我有一个网站,我试图使其符合 XHTML 1.0 Strict。 已相应地声明了 doctype,并且我已将 web.config 设置为以下内容:

  <system.web>
    <xhtmlConformance mode="Strict"/>
  </system.web>

我的问题现在在这里。我有一个 BulletedList 服务器控件,其 DisplayMode 设置为 BulletedListDisplayMode.HyperLink。

此控件由 web.sitemap xml 文件中的条目填充,其中第一个被禁用(在后面的代码中启用设置为 false)。因此,这会输出一个具有禁用属性的锚标记。但是,这不合规。

<ul id="example">
    <li class="first"><a disabled="disabled">test1</a></li>
    <li><a href="#">test2</a></li>
</ul>

当我根据 W3 验证器验证它时,它因此而失败。这是错误吗?鉴于设置的 xhtml 一致性,我本来希望锚标记根本没有呈现。

我只是想让列表中的第一项显示为纯文本而不是禁用的链接。有什么建议吗?

【问题讨论】:

    标签: asp.net xhtml bulletedlist


    【解决方案1】:

    您始终可以扩展 BulletedList 控件并适当地重新实现该部分。

    【讨论】:

    • 不幸的是,我不知道该怎么做。能举个例子吗?
    • 我完全不知道;我可能会使用 Reflector 来检查该类的源代码,查看它在哪里进行这种类型的渲染,然后重新实现它以在您的基类中按照自己的方式进行。
    【解决方案2】:

    问题实际上是 disabled 属性不应该应用于锚标记——只能应用于少数输入元素,例如按钮。

    您是否尝试过为“first”类的列表项中的锚标记修改 CSS 样式?

    【讨论】:

    • 是的,我以前也是这样,但因为它仍然可以点击,所以我尝试了这个,然后发现它未能通过验证器。
    【解决方案3】:

    我要去睡觉了,但我要狙击这个,给你一个可能的起点。

    你可以像上面所说的那样做,并覆盖 OnRender,或者你可以看看你是否可以使用 System.Web.UI.Adapters.ControlAdapter 和浏览器文件来完成你的任务。 ControlAdapter 的缺点是它将是站点范围的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多