服务器控件(Server Controls)
控件是图形用户界面的小构建块,包括文本框,按钮,复选框,列表框,标签和许多其他工具。 使用这些工具,用户可以输入数据,进行选择并指出他们的偏好。
控件还用于结构作业,如验证,数据访问,安全性,创建母版页和数据操作。
ASP.NET使用五种类型的Web控件,它们是:
- HTML控件
- HTML服务器控件
- ASP.NET服务器控件
- ASP.NET Ajax Server控件
- 用户控件和自定义控件
ASP.NET服务器控件是ASP.NET中使用的主要控件。 这些控件可以分为以下几类:
Validation controls - 这些Validation controls用于验证用户输入,它们通过运行客户端脚本来工作。
Data source controls - 这些控件提供与不同数据源的数据绑定。
Data view controls - 这些是各种列表和表,可以绑定到数据源中的数据进行显示。
Personalization controls - 这些用于根据用户首选项根据用户信息对页面进行个性化。
Login and security controls - 这些控件提供用户身份验证。
Master pages - 这些控件在整个应用程序中提供一致的布局和界面。
Navigation controls - 这些控件有助于导航。 例如,菜单,树视图等。
Rich controls - 这些控件实现了特殊功能。 例如,AdRotator,FileUpload和Calendar控件。
使用服务器控件的语法是:
<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 | Border style. |
BorderWidth | Border width. |
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 | Font. |
Forecolor | 前景色。 |
HasAttributes | 指示控件是否已设置属性。 |
HasChildViewState | 指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。 |
Height | 高度(以像素为单位)或%。 |
ID | Identifier for the control. |
IsChildControlStateCleared | 指示此控件中包含的控件是否具有控件状态。 |
IsEnabled | 获取一个值,该值指示控件是否已启用。 |
IsTrackingViewState | 它指示服务器控件是否正在保存对其视图状态的更改。 |
IsViewStateEnabled | 它指示是否为此控件启用了视图状态。 |
LoadViewStateById | 它指示控件是否参与通过ID而不是索引加载其视图状态。 |
Page | Page containing the control. |
Parent | Parent control. |
RenderingCompatibility | 它指定呈现的HTML将与之兼容的ASP.NET版本。 |
Site | 在设计图面上呈现时承载当前控件的容器。 |
SkinID | 获取或设置要应用于控件的外观。 |
Style | 获取将在Web服务器控件的外部标记上呈现为样式属性的文本属性的集合。 |
TabIndex | 获取或设置Web服务器控件的选项卡索引。 |
TagKey | 获取与此Web服务器控件对应的HtmlTextWriterTag值。 |
TagName | 获取控件标记的名称。 |
TemplateControl | 包含此控件的模板。 |
TemplateSourceDirectory | 获取包含此控件的页面或控件的虚拟目录。 |
ToolTip | 获取或设置鼠标指针悬停在Web服务器控件上时显示的文本。 |
UniqueID | Unique identifier. |
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) | 在当前命名容器中搜索具有指定标识和整数的服务器控件。 |
Focus | 将输入焦点设置为控件。 |
GetDesignModeState | 获取控件的设计时数据。 |
GetType | 获取当前实例的类型。 |
GetUniqueIDRelativeTo | 返回指定控件的UniqueID属性的前缀部分。 |
HasControls | 确定服务器控件是否包含任何子控件。 |
HasEvents | 指示是否为控件或任何子控件注册事件。 |
IsLiteralContent | 确定服务器控件是否仅包含文字内容。 |
LoadControlState | Restores control-state information. |
LoadViewState | Restores view-state information. |
MapPathSecure | 检索虚拟路径(绝对路径或相对路径)映射到的物理路径。 |
MemberwiseClone | 创建当前对象的浅表副本。 |
MergeStyle | 将指定样式的任何非空白元素复制到Web控件,但不会覆盖控件的任何现有样式元素。 |
OnBubbleEvent | 确定服务器控件的事件是否向上传递到页面的UI服务器控件层次结构。 |
OnDataBinding | 引发数据绑定事件。 |
OnInit | 引发Init事件。 |
OnLoad | 引发Load事件。 |
OnPreRender | 引发PreRender事件。 |
OnUnload | 引发Unload事件。 |
OpenFile | 获取用于读取文件的Stream。 |
RemovedControl | 从控件对象的控件集合中删除子控件后调用。 |
Render | 将控件呈现给指定的HTML编写器。 |
RenderBeginTag | 将控件的HTML开始标记呈现给指定的编写器。 |
RenderChildren | 将服务器控件的子项的内容输出到提供的HtmlTextWriter对象,该对象写入要在客户端上呈现的内容。 |
RenderContents | 将控件的内容呈现给指定的编写器。 |
RenderControl(HtmlTextWriter) | 将服务器控件内容输出到提供的HtmlTextWriter对象,并在启用跟踪时存储有关控件的跟踪信息。 |
RenderEndTag | 将控件的HTML结束标记呈现到指定的编写器中。 |
ResolveAdapter | 获取负责呈现指定控件的控件适配器。 |
SaveControlState | 保存自页面发回服务器以来发生的任何服务器控件状态更改。 |
SaveViewState | 保存调用TrackViewState方法后修改的任何状态。 |
SetDesignModeState | 设置控件的设计时数据。 |
ToString | 返回表示当前对象的字符串。 |
TrackViewState | 使控件跟踪其视图状态的更改,以便它们可以存储在对象的视图状态属性中。 |
例子 (Example)
让我们看一下特定的服务器控件 - 树视图控件。 树视图控件位于导航控件下。 其他导航控件包括:菜单控件和SiteMapPath控件。
在页面上添加树视图控件。 从任务中选择“编辑节点...”。 使用树视图节点编辑器编辑每个节点,如下所示:
创建节点后,它在设计视图中如下所示:
AutoFormat ...任务允许您格式化树视图,如下所示:
在页面上添加标签控件和文本框控件,并分别将它们命名为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;
}
}
}
}
}
执行页面以查看效果。 您将能够展开和折叠节点。