ASP.NET 服务器控件和浏览器功能

不同的浏览器和相同浏览器的不同版本支持不同的功能。ASP.NET 服务器控件将自动确定请求了 .aspx 页的浏览器的级别,并为该浏览器正确设置所生成的 HTML 的格式。但是,部分控件功能无法在较低版本的浏览器上呈现,因此需要在尽可能多的浏览器类型上查看页的输出,以确保页以预期方式呈现在所有浏览器中。

浏览器类型的自动检测

默认情况下,ASP.NET 页框架可以读取请求期间从浏览器传递到服务器的用户代理信息,从而确定浏览器的功能。(此信息可用作 HttpRequest 对象的 UserAgent 属性。)此页将用户代理信息与应用程序、站点或计算机配置文件 (.config) 中的代理条目相匹配。当页查找到当前用户代理信息和文件中列出的用户代理之间的匹配项时,它可以读取相应的浏览器功能,例如,该浏览器是否支持脚本撰写、样式、框架等等。基于这些功能,页中的控件使用上级(符合 CSS)或下级(非 CSS)HTML 元素来呈现 Web 控件。

重写浏览器类型检测

如果您要显式控制页的呈现方式,而不是依赖浏览器自动检测,可以设置页的 ClientTarget 属性。您可以在“属性”窗口或“HTML”视图中执行此操作。属性设置将作为该页的 @ Page 指令的属性保存。

ClientTarget 属性的值是您想要用来呈现页的浏览器类型的别名。默认情况下,可以使用以下别名:

  • ie4   使用 Internet Explorer 4 功能呈现。
  • ie5   使用 Internet Explorer 5 功能呈现。
  • uplevel   使用 Internet Explorer 4 功能呈现。
  • downlevel   使用 HTML 3.2 功能呈现;也就是说,没有 CSS 支持。

以上这些别名在服务器的 machine.config 文件的 <clientTarget> 元素中定义并映射到特定的用户代理信息。例如,将别名“ie5”映射到通常由 Internet Explorer 5 返回的用户代理信息。

通过指定“downlevel”,不管什么样的浏览器请求页,您都可以强制该页呈现与 HTML 3.2 兼容的元素。同样,通过指定“ie5”,您甚至可以强制页为下级浏览器呈现 CSS 样式属性。

您可以在 machine.config 或 Web.config 文件中定义另外的别名来创建这些别名,这样您便能够创建自定义的浏览器定义。有关更多信息,请参见 ASP.NET 设置架构

注意   页的 ClientTarget 属性使您可以指定在运行时如何呈现页,但在设计时不在 Visual Studio Web 窗体设计器中使用它。若要为生成 HTML 元素指定浏览器类型、验证 HTML 以及为语句完成提供相应的 HTML 选项,请设置页的 targetSchema 属性。

客户端脚本

ASP.NET 服务器控件的某些功能取决于是否能够运行客户端脚本。如果浏览器能够执行脚本,客户端脚本将自动生成并作为页的一部分发送。尽管如此,部分用户可能会在其浏览器中关闭脚本的执行,并将因此无法使用控件的全部功能。有关更多信息,请参见 Web 窗体页中的客户端脚本

上级和下级浏览器功能

浏览器和客户端设备被分为两个不同的组:上级和下级。这两个组定义浏览器或客户端设备提供的本机支持的类型,并且它们通常确定从 Web 服务器加载页的表示形式和行为。

视为上级的浏览器和客户端设备通常支持下面至少一项:

  • ECMAScript (JScript, JavaScript) 1.2 版
  • HTML 4.0 版
  • Microsoft 文档对象模型 (MSDOM)
  • 层叠样式表 (CSS)

下级浏览器和客户端设备仅支持:

  • HTML 3.2 版

以下服务器控件属性在上级和下级浏览器中呈现不同结果:

  • AccessKey 对于任何控件都无法在下级浏览器中工作。它不是 HTML 4.0 并且只能在 Microsoft Internet Explorer 4 或更高版本中工作。
  • BackColor 在下级浏览器中只能用于下面这些控件:Table、Panel、DataGrid、Calendar 和 ValidationSummary。如果布局是在 Table 中,则该属性还可用于 CheckBoxList、RadioButtonList 和 DataList。总之,只有呈现为 <table> 标记的控件可以在 HTML 3.2 中输出背景色,但在 HTML 4.0 就没有这一限制。对于在 <span> 标记中呈现的控件,其中包括标签、验证器控件和流模式的列表控件,BackColor 在 Internet Explorer 5 或更高版本中工作,但不能在 Internet Explorer 4 中工作。
  • BorderColor 在下级浏览器中只能用于和 BackColor 相同的基于表的控件。但是,它输出为“bordercolor”属性,该属性不是 HTML 3.2 标准的组成部分。部分浏览器支持这一属性,包括 Explorer 3.0 和更高版本,但并非所有浏览器都如此。
  • BorderStyle 在任何下级浏览器中都无法工作。HTML 3.2 中没有其对等属性。
  • BorderWidth 只能在呈现为 <table>(Table、Panel、DataGrid 和 Calendar)或 <img>(Image、AdRotator)的控件中工作。BorderWidth 仅在以像素为单位指定时才在下级浏览器中工作,否则它将始终呈现为 border=1 或 border=0。此外,如果 GridLines 设置为 None 以外的值,BorderWidth 将只能用于基于表的控件。这是因为无法在 HTML 3.2 中指定没有网格线的边界。对于呈现为 <span> 标记的控件,包括标签、验证器控件和流模式的列表控件,BorderWidth 在 Internet Explorer 5 或更高版本中工作,但不能在 Internet Explorer 4 中工作。
  • CssClass 在任何浏览器中都呈现为类属性。大多数上级浏览器都识别该类属性。
  • Enabled 用于指定控件是否引发其事件和功能。在 Internet Explorer 4 或更高版本中,将 Enabled 设置为 false 相当于使用“disabled=true”属性使控件显示为不可用并且被锁定为不接受输入。
  • 对于上级浏览器,Font-BoldFont-ItalicFont-Strikeout 和类似属性会呈现为样式属性(例如,Font-Weight 呈现为粗体,Font-Style 呈现为斜体);而对于下级浏览器,它们会呈现为独立元素(例如,<b> 和 <i>)。
  • Font-Size 只在使用指定字体大小(小、较小等)的情况下可以为所有控件在下级浏览器中工作。在上级浏览器中,该属性将呈现为样式属性;在下级浏览器中,它将呈现为 <font> 元素。
  • Font-Overline 在任何下级浏览器中都不工作。
  • ForeColor 在下级浏览器中可以用于除 Image、AdRotator、HyperLink 和 LinkButton 之外的所有控件。对于下级浏览器,ForeColor 将呈现在 <font> 标记中。
  • Height 在下级浏览器中不能用于标签、验证器控件、HyperLinks 或 LinkButtons。在布局设置为 Flow 的情况下 Height 也无法用于 CheckBoxLists、RadioButtonLists 和 DataLists。只有像素和百分比度量值才有效。对于基于表的控件,这不是标准的 HTML,并且只能在较高版本的上级浏览器中工作。
  • TabIndex 对于任意控件都无法在下级浏览器中工作。它不是 HTML 4.0 并且只能在 Internet Explorer 4.0 或更高版本中工作。
  • ToolTip 在任何下级浏览器上都无法工作。
  • Width 在下级浏览器中不能用于标签、验证器控件、HyperLinks 或 LinkButtons。在布局设置为 Flow 的情况下,Width 也无法用于 CheckBoxLists、RadioButtonLists 和 DataLists。只有像素和百分比度量值才有效。

Table、Calendar、DataList、DataGrid、RadioButtonList 和 CheckBoxList

  • GridLines 在 HTML 3.2 中只能为“开”或“关”。将同时为垂直和水平格线呈现任何值设置。如上所述,如果 GridLines 设置为“None”,控件将没有边框。

Calendar

  • ForeColor 只能在 4.0 或更高版本的上级浏览器中应用于由日历 (Calendar) 控件显示的链接,原因是它使用样式属性来分配链接颜色。

请参见

在 Web 窗体中检测浏览器类型 | Web 窗体编程