控件是图形用户界面的小型构建块,其中包括文本框,按钮,复选框,列表框,标签以及许多其他工具。使用这些工具,用户可以输入数据,进行选择并设置他们的偏好。
控件还用于结构化作业,如验证,数据访问,安全性,创建母版页和数据操作。
ASP.NET使用五种类型的Web控件,它们是:
- HTML控件
- HTML服务器控件
- ASP.NET服务器控件
- ASP.NET Ajax服务器控件
- 用户控件和自定义控件
ASP.NET服务器控件是ASP.NET中使用的主要控件。这些控件可以分为以下几类:
- 验证控件 - 用于验证用户输入,并通过运行客户端脚本进行工作。
- 数据源控件 - 这些控件提供了与不同数据源的数据绑定。
- 数据视图控件 - 这些是各种列表和表格,它们可以绑定到数据源中的数据进行显示。
- 个性化控件 - 这些控件用于根据用户的喜好,根据用户信息对页面进行个性化设置。
- 登录和安全控件 - 这些控件提供用户身份验证。
- 母版页 - 这些控件在整个应用程序中提供一致的布局和界面。
- 导航控件 - 这些控件有助于导航。 例如,菜单,树视图等
- 富控件 - 这些控件实现特殊功能。 例如,
AdRotator
,FileUpload
和Calendar
控件。
使用服务器控件的语法是:
<asp:controlType ID ="ControlID" runat="server" Property1=value1 [Property2=value2] />
另外,visual studio 具有以下功能,可以帮助制作无误码:
- 在设计视图中拖放控件
- 智能感知功能,显示和自动完成属性
- 属性窗口直接设置属性值
服务器控件的属性
具有可视方面的ASP.NET服务器控件是从WebControl
类派生的,并继承了此类的所有属性,事件和方法。
WebControl
类本身和一些其他不可视化呈现的服务器控件都是从System.Web.UI.Control
类派生的。例如,PlaceHolder
控件或XML控件。
ASP.Net服务器控件继承WebControl
和System.Web.UI.Control
类的所有属性,事件和方法。
下表显示了所有服务器控件通用的继承属性:
编号 | 属性 | 描述 |
---|---|---|
1 | AccessKey |
用Alt 键按下此键将焦点移到控件上。 |
2 | Attributes |
它是任意属性(仅用于渲染)的集合,它们不与控件上的属性相对应。 |
3 | BackColor |
背景颜色。 |
4 | BindingContainer |
包含此控件的数据绑定的控件。 |
5 | BorderColor |
边框颜色。 |
6 | BorderStyle |
边框格式 |
7 | BorderWidth |
边框宽度 |
8 | CausesValidation |
指示是否验证。 |
9 | ChildControlCreated |
它指示服务器控件的子控件是否已创建。 |
10 | ClientID |
HTML标记的控件ID。 |
11 | Context |
与服务器控件关联的HttpContext对象。 |
12 | Controls |
包含在控件中的所有控件的集合。 |
13 | ControlStyle |
Web服务器控件的风格(样式)。 |
14 | CssClass |
CSS类 |
15 | DataItemContainer |
如果命名容器实现了IDataItemContainer ,则获取对命名容器的引用。 |
16 | DataKeysContainer |
如果命名容器实现了IDataKeysControl ,则获取对命名容器的引用。 |
17 | DesignMode |
它指示控件是否在设计表面上使用。 |
18 | DisabledCssClass |
获取或设置CSS控件禁用时应用于呈现的HTML元素的CSS类。 |
19 | Enabled |
指示控件是否变灰。 |
20 | EnableTheming |
表示主题是否适用于控件。 |
21 | EnableViewState |
指示是否保持控件的视图状态。 |
22 | Events |
获取控件的事件处理程序委托的列表。 |
23 | Font |
字体 |
24 | Forecolor |
前景颜色。 |
25 | HasAttributes |
指示控件是否设置了属性。 |
26 | HasChildViewState |
指示当前服务器控件的子控件是否具有任何保存的视图状态设置。 |
28 | Height |
以像素或% 为单位来设置高度。 |
30 | ID |
控件的标识符。 |
31 | IsChildControlStateCleared |
指示此控件中包含的控件是否具有控件状态。 |
32 | IsEnabled |
获取一个指示控件是否启用值。 |
33 | IsTrackingViewState |
它指示服务器控件是否将更改保存到其视图状态。 |
34 | IsViewStateEnabled |
它指示是否对此控件启用视图状态。 |
35 | LoadViewStateById |
它指示控件是否参与通过ID而不是索引来加载其视图状态。 |
36 | Page |
包含该控件的页面。 |
37 | Parent |
父控件。 |
38 | RenderingCompatibility |
它指定了呈现的HTML将兼容的ASP.NET版本。 |
39 | Site |
在设计图面上呈现时承载当前控件的容器。 |
40 | SkinID |
获取或设置要应用于控件的外观。 |
41 | Style |
获取将在Web服务器控件的外部标记上呈现为样式属性的文本属性的集合。 |
42 | TabIndex |
获取或设置Web服务器控件的选项卡索引。 |
43 | TagKey |
获取对应于此Web服务器控件的HtmlTextWriterTag 值。 |
44 | TagName |
获取控件标记的名称。 |
45 | TemplateControl |
包含此控件的模板。 |
46 | TemplateSourceDirectory |
获取包含此控件的页面或控件的虚拟目录。 |
47 | ToolTip |
获取或设置鼠标指针悬停在Web服务器控件上时显示的文本。 |
48 | UniqueID |
唯一标识符。 |
49 | ViewState |
获取状态信息的字典,该字典可跨多个同一页面的请求保存和恢复服务器控件的视图状态。 |
50 | ViewStateIgnoreCase |
它指出StateBag 对象是否区分大小写。 |
51 | ViewStateMode |
获取或设置此控件的视图状态模式。 |
52 | Visible |
它指示服务器控件是否可见。 |
53 | Width |
获取或设置Web服务器控件的宽度。 |
服务器控件的方法
下表提供了服务器控件的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | AddAttributesToRender |
将需要呈现的HTML属性和样式添加到指定的HtmlTextWriterTag 。 |
2 | AddedControl |
在子控件添加到控件对象的控件集合后调用。 |
3 | AddParsedSubObject |
通知服务器控件已经解析了元素(XML或HTML),并将该元素添加到服务器控件的控件集合中。 |
4 | ApplyStyleSheetSkin |
将页面样式表中定义的样式属性应用于控件。 |
5 | ClearCachedClientID |
基础结构,将缓存的ClientID 值设置为null 。 |
6 | ClearChildControlState |
删除服务器控件的子控件的控件状态信息。 |
7 | ClearChildState |
删除所有服务器控件的子控件的视图状态和控件状态信息。 |
8 | ClearChildViewState |
删除所有服务器控件的子控件的视图状态信息。 |
9 | CreateChildControls |
用于创建子控件。 |
10 | CreateControlCollection |
创建一个新的ControlCollection 对象来保存子控件。 |
11 | CreateControlStyle |
创建用于实现所有样式相关属性的样式对象。 |
12 | DataBind |
将数据源绑定到服务器控件及其所有子控件。 |
13 | DataBind(Boolean) |
将数据源绑定到服务器控件及其所有子控件,并使用一个选项来引发DataBinding 事件。 |
14 | DataBindChildren |
将数据源绑定到服务器控件的子控件。 |
15 | Dispose |
使服务器控件在从内存释放之前执行最终清理。 |
16 | EnsureChildControls |
确定服务器控件是否包含子控件。如果没有,则创建子控件。 |
17 | EnsureID |
为没有标识符的控件创建一个标识符。 |
18 | Equals(Object) |
确定指定的对象(Object )是否等于当前对象。 |
19 | Finalize |
在对象被垃圾回收回收之前,允许对象尝试释放资源并执行其他清理操作。 |
20 | FindControl(String) |
使用指定的id 参数在当前命名容器中搜索服务器控件。 |
21 | FindControl(String, Int32) |
在当前命名容器中搜索具有指定标识和整数的服务器控件。 |
22 | Focus |
将输入焦点设置为控件。 |
23 | GetDesignModeState |
获取控件的设计时数据。 |
24 | GetType |
获取当前实例的类型。 |
25 | GetUniqueIDRelativeTo |
返回指定控件的UniqueID 属性的前缀部分。 |
26 | HasControls |
确定服务器控件是否包含任何子控件。 |
27 | HasEvents |
指示是否为控件或任何子控件注册事件。 |
28 | IsLiteralContent |
确定服务器控件是否仅保存文字内容。 |
29 | LoadControlState |
恢复控制状态信息。 |
30 | LoadViewState |
恢复视图状态信息。 |
31 | MapPathSecure |
检索虚拟路径(绝对或相对)映射到的物理路径。 |
32 | MemberwiseClone |
创建当前对象的浅表副本。 |
33 | MergeStyle |
将指定样式的非空白元素复制到Web控件,但不覆盖控件的任何现有样式元素。 |
34 | OnBubbleEvent |
确定是否将服务器控件的事件传递给页面的UI服务器控件层次结构。 |
35 | OnDataBinding |
引发数据绑定事件。 |
36 | OnInit |
引发Init 事件。 |
37 | OnLoad |
引发Load 事件。 |
38 | OnPreRender |
引发PreRender 事件。 |
39 | OnUnload |
引发Unload 事件。 |
40 | OpenFile |
获取用于读取文件的流。 |
41 | RemovedControl |
在从控件对象的控件集合中删除子控件后调用。 |
42 | Render |
将控件呈现给指定的HTML编写器。 |
43 | RenderBeginTag |
将控件的HTML开始标记呈现给指定的写入器。 |
44 | RenderChildren |
将服务器控件的子项的内容输出到提供的HtmlTextWriter 对象,该对象将要呈现的内容写入客户端。 |
45 | RenderContents |
将控件的内容呈现给指定的写入器。 |
46 | RenderControl(HtmlTextWriter) |
将服务器控件内容输出到提供的HtmlTextWriter 对象,并在启用跟踪时存储有关该控件的跟踪信息。 |
47 | RenderEndTag |
将控件的HTML结束标记呈现给指定的写入器。 |
48 | ResolveAdapter |
获取负责渲染指定控件的控件适配器。 |
49 | SaveControlState |
保存页面发回服务器以来发生的所有服务器控件状态更改。 |
50 | SaveViewState |
保存TrackViewState 方法被调用后修改的任何状态。 |
51 | SetDesignModeState |
为控件设置设计时数据。 |
52 | ToString |
返回表示当前对象的字符串。 |
53 | TrackViewState |
使控件跟踪其视图状态的更改,以便它们可以存储在对象的视图状态属性中。 |
示例
打开Visual Studio创建一个空的网站项目:ServerControls,如下所示 -
并在这个新的项目中,添加一个新的Web窗体文件 - Default.aspx。
下面来看看服务器控件 - 一个树视图控件。 树视图控件位于导航控件下。 其他导航控件是:菜单控件和SiteMapPath控件。
在页面上添加一个树视图控件。 从任务中选择编辑节点使用树视图节点编辑器编辑每个节点,如下所示:
当创建了节点,在设计视图中看起来如下所示:
自动套用格式任务使用箭头,如下所示格式化树视图:
在页面上添加一个标签控件和一个文本框控件,分别命名为lblmessage
和txtmessage
。
编写几行代码,以确保选择特定节点时,标签控件显示节点文本,文本框显示其下的所有子节点(如果有的话)。 现在Default.aspx的代码内容如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>服务器控件示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" ImageSet="Arrows" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged1">
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
<Nodes>
<asp:TreeNode Text="小牛技术有限公司" Value="小牛技术有限公司">
<asp:TreeNode Text="技术部" Value="技术部">
<asp:TreeNode Text="陈Java" Value="陈Java"></asp:TreeNode>
<asp:TreeNode Text="李PHP" Value="李PHP"></asp:TreeNode>
<asp:TreeNode Text="张MySQL" Value="张MySQL"></asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="市场部" Value="市场部">
<asp:TreeNode Text="李小双" Value="李小双"></asp:TreeNode>
<asp:TreeNode Text="罗十步" Value="罗十步"></asp:TreeNode>
<asp:TreeNode Text="渣渣辉" Value="渣渣辉"></asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
</Nodes>
<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
<ParentNodeStyle Font-Bold="False" />
<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px" VerticalPadding="0px" />
</asp:TreeView>
<br />
<asp:Label ID="txtmessage" runat="server"></asp:Label>
<br />
<asp:Label ID="lblmessage" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
Default.aspx.cs 的代码内容如下:
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;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
txtmessage.Text = "Page_Load ";
}
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
txtmessage.Text = " ";
lblmessage.Text = "最近选择: " + TreeView1.SelectedNode.Text;
TreeNodeCollection childnodes = TreeView1.SelectedNode.ChildNodes;
if (childnodes != null)
{
txtmessage.Text = " ";
foreach (TreeNode t in childnodes)
{
txtmessage.Text += ", "+t.Value;
}
}
}
}
执行该页面以查看效果。可以看到现在能够展开和折叠节点。