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

更新:2007 年 11 月

不同的浏览器和相同浏览器的不同版本支持不同的功能。ASP.NET 服务器控件会自动确定发出页面请求的浏览器,并为该浏览器呈现适当的标记。但是,部分控件功能无法在较低版本的浏览器上呈现,因此需要在尽可能多的浏览器类型上查看页的输出,以确保页以预期方式呈现在所有浏览器中。

浏览器类型的自动检测

默认情况下,ASP.NET 页框架可以读取请求期间从浏览器传递到服务器的用户代理信息,从而确定浏览器的功能。(此信息可用作 HttpRequest 对象的 UserAgent 属性。)页面会根据配置文件和浏览器定义文件中的代理项来匹配用户代理信息。

x3k2ssx2.alert_note(zh-cn,VS.90).gif说明:

配置文件 (.config) 的 browserCaps 节在 .NET Framework 2.0 版中已被否决。为了实现向后兼容性,如果本节中的配置设置是在应用程序级别设置的,则这些设置将仍然有效,但会与浏览器定义文件 (.browser) 中包含的信息合并到一起。浏览器定义文件位于计算机级别的 %SystemRoot%\Microsoft.NET\Framework\版本号\CONFIG\Browsers 文件夹以及任何现有应用程序级别的 App_Browser 文件夹中。有关更多信息,请参见浏览器定义文件架构(browsers 元素)

当页查找到当前用户代理信息和文件中列出的用户代理之间的匹配项时,它可以读取相应的浏览器功能,例如,该浏览器是否支持脚本撰写、样式、框架等等。页面上的控件会根据这些功能使用适当的标记(XHTML、HTML 3.2,等等)来呈现 Web 控件。如果 ASP.NET 在呈现 HTML 元素,它就可以确定是呈现较新版本(符合级联样式表)的 HTML 元素还是呈现早期版本(不符合级联样式表)的 HTML 元素。对于旧版浏览器,ASP.NET 将使用元素(例如,font 元素)而不是 CSS 样式来呈现格式设置信息。

重写浏览器类型检测

如果要显式控制页面的呈现方式,而不是依赖浏览器自动检测,则可以设置页面的 ClientTarget 属性 (Property)。可以通过声明方式将该属性 (Property) 设置为该页的 @ Page 指令的一个属性 (Attribute),也可以通过编程方式进行此项设置。

ClientTarget 属性的值是您想要用来呈现页的浏览器类型的别名。例如,若要强制页面通过 Microsoft Internet Explorer 6.0 来呈现,则可以使用别名 uplevel。此别名必须在配置文件的 clientTarget 节中定义。预定义的默认别名有 ie5、ie4、uplevel 和 downlevel。

通过指定别名 downlevel,可以强制页面呈现兼容 HTML 3.2 的元素,而不管是使用哪种浏览器请求了页面。同样,通过指定 uplevel,可以强制页面显示 CSS 样式属性,即使是旧版浏览器也显示。

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

支持 AJAX 的 ASP.NET 控件和功能

在 ASP.NET 中,支持 AJAX 的功能可与当今的大多数浏览器兼容,并使用这些浏览器的默认安全设置运行。这些控件和功能要求浏览器能够运行客户端脚本。UpdatePanelScriptManager 控件都是支持 AJAX 的控件的示例。有关与支持 AJAX 的控件和功能兼容的浏览器及其建议安全设置的列表,请参见支持 AJAX 的 ASP.NET 页面的浏览器安全设置

x3k2ssx2.alert_note(zh-cn,VS.90).gif说明:

通过使用 HttpBrowserCapabilities 对象公开的属性,可以确定浏览器是否支持 ECMAScript(JScript、JavaScript)。

有关 ASP.NET 中的 AJAX 功能的概述,请参见添加 AJAX 和客户端功能

客户端脚本

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

使用早期版本的浏览器

浏览器分为两组,人们有时将它们称为“上级”浏览器(新版本)和“下级”浏览器(早期版本)。这两个组定义了浏览器提供的本机支持类型,通常也决定了网页的表示形式和行为。

通常情况下,被视为“上级”的浏览器至少支持以下内容:

  • ECMAScript (JScript, JavaScript) 1.2 版。

  • HTML 4.0 版。

  • Microsoft 文档对象模型 (MSDOM)。

  • 级联样式表 (CSS)。

“下级”浏览器和客户端设备仅支持以下内容:

  • HTML 3.2 版

下表列出的服务器控件属性在上级和下级浏览器中的呈现情况有所不同。

服务器控件属性

在上级和下级浏览器中的呈现行为

AccessKey

此属性在任何下级浏览器中对任何控件均无效。它不属于 HTML 4.0,仅在 Internet Explorer 4.0 或更高版本中有效。

BackColor

此属性在下级浏览器中仅对某些特定控件有效,这些控件包括:TablePanelGridViewCalendarValidationSummary。如果布局位于 Table 控件中,则此属性对 CheckBoxListRadioButtonListDataList 控件也有效。总之,在 HTML 3.2 中,只有呈现为 table 元素的控件可以输出背景色,但在 HTML 4.0 中,几乎任何控件都可以。对于呈现 span 元素的控件,包括 Flow 模式下的 Label 控件、验证程序控件和列表控件,BackColor 在 Internet Explorer 5 或更高版本中有效,但在 Internet Explorer 4.0 中无效。

BorderColor

此属性 (Property) 在下级浏览器中仅对与 BackColor 相同的基于表的控件有效。但是,它输出为 bordercolor 属性 (Attribute),该属性不是 HTML 3.2 标准的组成部分。部分浏览器支持这一属性,包括 Explorer 3.0 和更高版本,但并非所有浏览器都如此。

BorderStyle

此属性在任何下级浏览器中均无效。HTML 3.2 中没有其对等属性。

BorderWidth

此属性只在呈现为 HTML table 元素(TablePanelGridViewCalendar)或呈现为 img 元素(ImageAdRotator)的控件中有效。只有在按像素进行了指定的情况下,BorderWidth 才会在下级浏览器中有效;否则,它会始终以 border=1 或 border=0 的形式呈现。另外,只有将 GridLines 设置为 None 以外的值时,BorderWidth 才能和基于表的控件一起使用。这是因为无法在 HTML 3.2 中指定没有网格线的边界。对于呈现 span 元素的控件,包括 Flow 模式下的 Label 控件、验证程序控件和列表控件,BorderWidth 在 Internet Explorer 5 或更高版本中有效,但在 Internet Explorer 4.0 中无效。

CssClass

无论在哪种浏览器上,此属性 (Property) 都呈现为 class 属性 (Attribute)。大多数上级浏览器都可识别 class 属性。

Enabled

此属性 (property) 用于指定控件是否引发其事件和函数。在 Internet Explorer 4.0 或更高版本中,将 Enabled 设置为 false 与以下操作的效果相同:使用 disabled=true 属性 (Attribute),使控件显示为不可用,将其锁定而不允许输入。

Font-Bold、Font-Italic、Font-Strikeout 及类似属性

这些属性 (Property) 在上级浏览器中呈现为 style 属性 (Attribute)(例如,表示粗体的 Font-Weight 和表示斜体的 Font-Style),但在下级浏览器中则呈现为独立元素(例如,b 和 i)。

Font-Size

只有在使用指定字体大小(小、较小等)的情况下,此属性才在下级浏览器中对所有控件都有效。在上级浏览器中,此属性 (Property) 呈现为 style 属性 (Attribute);在下级浏览器中,它呈现为 font 元素。

Font-Overline

此属性在任何下级浏览器中均无效。

ForeColor

此属性在下级浏览器中对 ImageAdRotatorHyperLinkLinkButton 之外的所有其他控件均有效。在下级浏览器中,ForeColor 通过 font 元素呈现。

Height

此属性在下级浏览器中对 Label 控件、验证程序控件、HyperLink 控件或 LinkButton 控件均无效。另外,当 CheckBoxListRadioButtonListDataList 控件的布局被设置为 Flow 时,Height 属性也对这些控件无效。只有像素和百分比度量值有效。

对于基于表的控件,将不会为下级浏览器呈现内部表的高度,因为 Height 属性在 HTML 4.01 中已被否决。这会导致上级和下级呈现之间的外观稍有不同。如果对 SideBarStyle 属性设置了 BackColor,差别将最为明显:在上级浏览器中,BackColor 会显示为该列的整个长度,而在下级浏览器中,它将仅显示为容纳文本按钮所需的长度。

TabIndex

此属性在任何下级浏览器中对任何控件均无效。它不属于 HTML 4.0,仅在 Internet Explorer 4.0 或更高版本中有效。

ToolTip

此属性在任何下级浏览器中均无效。

Width

此属性在下级浏览器中对 LabelHyperLinkLinkButton 或验证程序控件均无效。另外,当 CheckBoxListRadioButtonListDataList 控件的布局被设置为 Flow 时,Width 属性也对这些控件无效。只有像素和百分比度量值有效。

请参见

任务

如何:在 ASP.NET 网页中检测浏览器类型

演练:开发和使用自定义服务器控件

参考

ClientTarget

clientTarget 元素(ASP.NET 设置架构)

HttpBrowserCapabilities

Browser

UserAgent

WebControl

其他资源

ASP.NET 网页编程

开发自定义 ASP.NET 服务器控件