ASP.NET 2.0: 执行Web标准以便更加易于访问
lt;td>
<table cellpadding="0" cellspacing="0" border="0"
width="100%">
<tr>
<td style="white-space:nowrap;width:100%;">
<a class="ctl00_menuTop_1"
href="http://Msdn.WebStandards/Default.aspx">Main Page</a>
</td>
<td style="width:0;">
<img src="/Msdn.WebStandards/WebResource.axd?d=hnH9bjBrxucw46WA5Xha0Kh9gZ-
YF67wSyd4b51QsEc1&t=632962190992968750"
alt="Expand Main Page"
style="border-style:none;vertical-align:middle;" />
</td>
</tr>
</table>
</td>
</tr>
</table>
由于在表格中的数据通常不是表格时 HTML 呈现为表格,所以认为此代码不符合 Web 标准。使用 HTML 表格呈现一列菜单项,就像使用 DataSet(而不是通常使用的字符串阵列或集合)来处理一个 作业一样。呈现此类分层数据的可行方法是使用 HTML 无序列表,如果您把菜单当作一系列嵌套列表就容易理解 了。 幸运的是,Microsoft 发布了 ASP.NET 2.0 CSS 友好控件适配器 1.0 工具包,使您可以覆盖控件 的默认输出以便在控件呈现时删除、替换或注入 HTML。经过几次反复测试之后,Microsoft 发布了该工具包, 您可以从 asp.net/CSSAdapters/Default.aspx 下载。 CSS 控件适配器使您可以在不修改控件源代码的 情况下,重写任何控件输出的功能,而不管控件是随 ASP.NET 2.0 提供的、由第三方提供的还是自定义的。作 为开发人员,您不会拥有全部所用控件的源代码;即使有,修改源代码并不总是重写功能的最佳方法。如果您需 要修改的只是呈现的 HTML,那更是如此。 驱动控件适配器的体系结构是基于适配器或包装设计模式构建的。抽象类 ControlAdapter 定义了所有适配 器的基本功能。WebControlAdapter 类在添加用于呈现各个 HTML 标记的方法的同时,继承了 ControlAdapter 功能。菜单适配器等类从 WebControlAdapter 继承而来,以便提供针控件专用的功能。图 5 显示了控件适配器 的类关系图。 图 5 ASP.NET 2.0 控件适配器类 此体系结构的实现非常简单,对于已经开发了适配器的控件而言尤为如此。幸运的是,几乎所有 ASP.NET 控 件都有适配器。在所示的示例中,MenuAdapter 类用于替代具有无序列表的默认 HTML 表格布局。 完成 此操作的第一步是创建或自定义一个浏览器定义文件,该文件用于检测访问 ASP.NET 2.0 站点的浏览器并为该 浏览器提供特定的功能。这是一个为通过移动设备访问站点的用户提供自定义体验的好方法。但是,如果使用 CSS 控件适配器,浏览器定义文件用于表示兼容的浏览器应使用一个或多个适配器。 图 6 所示的 XML 显示了一个完整的浏览器定义文件,该文件告诉 ASP.NET 将所有 MenuControl 类路由到任何符合所述条件的浏 览器的 MenuAdapter。该条件描述了支持 JavaScript 和 CSS 的所有符合 W3C 的浏览器。这与如今使用的大多 数浏览器一致。浏览器定义文件还为您提供了可用于各类其他自定义用户体验的信息。 Figure 6 ASP.NET 2.0 浏览器定义文件 <browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="CSSFriendly.MenuAdapter" /> </controlAdapters> < |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |