ASP.NET - 服务器控件
控件是图形用户界面的小构建块,其中包括文本框、按钮、复选框、列表框、标签和许多其他工具。 使用这些工具,用户可以输入数据、进行选择并表明他们的偏好。
控件还用于结构作业,例如验证、数据访问、安全性、创建母版页和数据操作。
ASP.NET 使用五种类型的 Web 控件,它们是:
- HTML控件
- HTML 服务器控件
- ASP.NET 服务器控件
- ASP.NET Ajax 服务器控件
- 用户控件和自定义控件
ASP.NET 服务器控件是 ASP.NET 中使用的主要控件。 这些控件可以分为以下几类:
验证控件 - 这些用于验证用户输入,它们通过运行客户端脚本来工作。
数据源控件 - 这些控件提供到不同数据源的数据绑定。
数据视图控件 - 这些是各种列表和表格,可以绑定到数据源中的数据进行显示。
个性化控件 - 这些控件用于根据用户偏好、基于用户信息对页面进行个性化。
登录和安全控件 - 这些控件提供用户身份验证。
母版页 - 这些控件在整个应用程序中提供一致的布局和界面。
导航控件 - 这些控件有助于导航。 例如,菜单、树视图等。
特殊控件 - 这些控件实现特殊功能。 例如,AdRotator、FileUpload 和日历控件。
使用服务器控件的语法是:
<asp:controlType ID ="ControlID" runat="server" Property1=value1 [Property2=value2] />
此外,Visual Studio 还具有以下功能,可帮助进行无错误编码:
- 在设计视图中拖放控件
- 显示并自动完成属性的 IntelliSense 功能
- 直接设置属性值的属性窗口
服务器控件的属性
具有可视化方面的 ASP.NET 服务器控件派生自 WebControl 类,并继承该类的所有属性、事件和方法。
WebControl 类本身和其他一些未可视化呈现的服务器控件均派生自 System.Web.UI.Control 类。 例如,PlaceHolder 控件或 XML 控件。
ASP.Net 服务器控件继承 WebControl 和 System.Web.UI.Control 类的所有属性、事件和方法。
下表显示了所有服务器控件共有的继承属性:
| 属性 | 描述 |
|---|---|
| AccessKey | 与 Alt 键一起按下此键会将焦点移至控件。 |
| Attributes | 它是与控件上的属性不对应的任意属性(仅用于渲染)的集合。 |
| BackColor | 背景颜色。 |
| BindingContainer | 包含此控件的数据绑定的控件。 |
| BorderColor | 边框颜色。 |
| BorderStyle | 边框样式。 |
| BorderWidth | 边框宽度。 |
| CausesValidation | 指示是否引起验证。 |
| ChildControlCreated | 指示服务器控件的子控件是否已创建。 |
| ClientID | HTML 标记的控件 ID。 |
| Context | 与服务器控件关联的 HttpContext 对象。 |
| Controls | 控件中包含的所有控件的集合。 |
| ControlStyle | Web 服务器控件的样式。 |
| CssClass | CSS 类 |
| DataItemContainer | 如果命名容器实现了 IDataItemContainer,则获取对命名容器的引用。 |
| DataKeysContainer | 如果命名容器实现了 IDataKeysControl,则获取对命名容器的引用。 |
| DesignMode | 它指示该控件是否正在设计图面上使用。 |
| DisabledCssClass | 获取或设置禁用控件时应用于呈现的 HTML 元素的 CSS 类。 |
| Enabled | 指示控件是否灰显。 |
| EnableTheming | 指示主题是否适用于控件。 |
| EnableViewState | 指示是否保持控件的视图状态。 |
| Events | 获取控件的事件处理程序委托列表。 |
| Font | 字体。 |
| Forecolor | 前景色。 |
| HasAttributes | 指示控件是否设置了属性。 |
| HasChildViewState | 指示当前服务器控件的子控件是否有任何已保存的视图状态设置。 |
| Height | 高度(以像素或百分比为单位)。 |
| ID | 控件的标识符。 |
| IsChildControlStateCleared | 指示此控件中包含的控件是否具有控件状态。 |
| IsEnabled | 获取一个值,指示控件是否启用。 |
| IsTrackingViewState | 它指示服务器控件是否正在保存对其视图状态的更改。 |
| IsViewStateEnabled | 指示是否为此控件启用视图状态。 |
| LoadViewStateById | 通过ID而不是索引来指示控件是否参与加载其视图状态。 |
| Page | 包含控件的页面。 |
| Parent | 家长控制。 |
| RenderingCompatibility | 它指定呈现的 HTML 将兼容的 ASP.NET 版本。 |
| Site | 在设计图面上呈现时托管当前控件的容器。 |
| SkinID | 获取或设置应用于控件的外观。 |
| Style | 获取文本属性的集合,这些属性将呈现为 Web 服务器控件外部标记上的样式属性。 |
| TabIndex | 获取或设置Web服务器控件的选项卡索引。 |
| TagKey | 获取与此 Web 服务器控件对应的 HtmlTextWriterTag 值。 |
| TagName | 获取控件标签的名称。 |
| TemplateControl | 包含此控件的模板。 |
| TemplateSourceDirectory | 获取包含此控件的页面或控件的虚拟目录。 |
| ToolTip | 获取或设置当鼠标指针悬停在 Web 服务器控件上时显示的文本。 |
| UniqueID | 唯一标识符。 |
| ViewState | 获取状态信息字典,该字典在同一页面的多个请求中保存和恢复服务器控件的视图状态。 |
| ViewStateIgnoreCase | StateBag对象是否不区分大小写。 |
| ViewStateMode | 获取或设置此控件的视图状态模式。 |
| Visible | 指示服务器控件是否可见。 |
| Width | 获取或设置 Web 服务器控件的宽度。 |
服务器控件的方法
下表提供了服务器控件的方法:
| 方法 | 描述 |
|---|---|
| AddAttributesToRender | 将需要渲染的HTML属性和样式添加到指定的HtmlTextWriterTag。 |
| AddedControl | 将子控件添加到控件对象的 Controls 集合后调用。 |
| AddParsedSubObject | 通知服务器控件已解析某个元素(XML 或 HTML),并将该元素添加到服务器控件的控件集合中。 |
| ApplyStyleSheetSkin | 将页面样式表中定义的样式属性应用到控件。 |
| ClearCachedClientID | 基础设施。 将缓存的 ClientID 值设置为 null。 |
| ClearChildControlState | 删除服务器控件的子控件的控件状态信息。 |
| ClearChildState | 删除所有服务器控件的子控件的视图状态和控件状态信息。 |
| ClearChildViewState | 删除所有服务器控件的子控件的视图状态信息。 |
| CreateChildControls | 用于创建子控件。 |
| CreateControlCollection | 创建一个新的 ControlCollection 对象来保存子控件。 |
| CreateControlStyle | 创建用于实现所有样式相关属性的样式对象。 |
| DataBind | 将数据源绑定到服务器控件及其所有子控件。 |
| DataBind(Boolean) | 将数据源绑定到服务器控件及其所有子控件,并提供引发 DataBinding 事件的选项。 |
| DataBindChildren | 将数据源绑定到服务器控件的子控件。 |
| Dispose | 使服务器控件能够在从内存中释放之前执行最终清理。 |
| EnsureChildControls | 确定服务器控件是否包含子控件。 如果没有,它将创建子控件。 |
| EnsureID | 为没有标识符的控件创建标识符。 |
| Equals(Object) | 判断指定对象是否等于当前对象。 |
| Finalize | 允许对象在垃圾收集回收对象之前尝试释放资源并执行其他清理操作。 |
| FindControl(String) | 在当前命名容器中搜索具有指定 id 参数的服务器控件。 |
| FindControl(String, Int32) | 在当前命名容器中搜索具有指定 ID 和整数的服务器控件。 |
| Focus | 将输入焦点设置到控件。 |
| GetDesignModeState | 获取控件的设计时数据。 |
| GetType | 获取当前实例的类型。 |
| GetUniqueIDRelativeTo | 返回指定控件的 UniqueID 属性的前缀部分。 |
| HasControls | 确定服务器控件是否包含任何子控件。 |
| HasEvents | 指示是否为控件或任何子控件注册事件。 |
| IsLiteralContent | 确定服务器控件是否仅包含文字内容。 |
| LoadControlState | 恢复控制状态信息。 |
| LoadViewState | 恢复视图状态信息。 |
| MapPathSecure | 检索虚拟路径(绝对路径或相对路径)映射到的物理路径。 |
| MemberwiseClone | 创建当前对象的浅表副本。 |
| MergeStyle | 将指定样式的任何非空白元素复制到 Web 控件,但不覆盖控件的任何现有样式元素。 |
| OnBubbleEvent | 确定服务器控件的事件是否向上传递到页面的 UI 服务器控件层次结构。 |
| OnDataBinding | 引发数据绑定事件。 |
| OnInit | 引发 Init 事件。 |
| OnLoad | 引发 Load 事件。 |
| OnPreRender | 引发 PreRender 事件。 |
| OnUnload | 引发卸载事件。 |
| OpenFile | 获取用于读取文件的 Stream。 |
| RemovedControl | 从控件对象的控件集合中删除子控件后调用。 |
| Render | 将控件呈现给指定的 HTML 编写器。 |
| RenderBeginTag | 将控件的 HTML 开始标记呈现给指定的编写器。 |
| RenderChildren | 将服务器控件子级的内容输出到提供的 HtmlTextWriter 对象,该对象写入要在客户端上呈现的内容。 |
| RenderContents | 将控件的内容呈现给指定的编写器。 |
| RenderControl(HtmlTextWriter) | 将服务器控件内容输出到提供的 HtmlTextWriter 对象,并存储有关该控件的跟踪信息(如果启用了跟踪)。 |
| RenderEndTag | 将控件的 HTML 结束标记呈现到指定的编写器中。 |
| ResolveAdapter | 获取负责呈现指定控件的控件适配器。 |
| SaveControlState | 保存自页面回发到服务器以来发生的任何服务器控件状态更改。 |
| SaveViewState | 保存调用 TrackViewState 方法后修改的任何状态。 |
| SetDesignModeState | 设置控件的设计时数据。 |
| ToString | 返回表示当前对象的字符串。 |
| TrackViewState | 使控件跟踪其视图状态的更改,以便将它们存储在对象的视图状态属性中。 |
示例
让我们看看一个特定的服务器控件 - 树视图控件。 树视图控件位于导航控件之下。 其他导航控件有:菜单控件和 SiteMapPath 控件。
在页面上添加树形视图控件。 从任务中选择编辑节点...。 使用树视图节点编辑器编辑每个节点,如下所示:
创建节点后,它在设计视图中如下所示:
自动套用格式...任务允许您设置树视图的格式,如下所示:
在页面上添加标签控件和文本框控件,分别命名为lblmessage和txtmessage。
编写几行代码,以确保当选择特定节点时,标签控件显示该节点文本,并且文本框显示其下的所有子节点(如果有)。 文件背后的代码应该如下所示:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace eventdemo {
public partial class treeviewdemo : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
txtmessage.Text = " ";
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) {
txtmessage.Text = " ";
lblmessage.Text = "Selected node changed to: " + TreeView1.SelectedNode.Text;
TreeNodeCollection childnodes = TreeView1.SelectedNode.ChildNodes;
if(childnodes != null) {
txtmessage.Text = " ";
foreach (TreeNode t in childnodes) {
txtmessage.Text += t.Value;
}
}
}
}
}
执行页面看看效果。 您将能够展开和折叠节点。

