ASP.NET 服务器控件
服务器控件
github地址:
https://github.com/ixixii/ASP.NET_02_WebForms
控件是在图形用户界面中的小功能块,其中包括文本框,按钮,复选框,列表框,标签,和许多其它工具。利用这些工具,用户可以输入数据,进行选择并注明自己的喜好。
控件也用于结构性工作,如验证,数据访问,安全保证,创建母版页和数据操作。
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还具有以下特点,以帮助产生无差错代码:
- 在设计视图中拖动和丢弃控件。
- 显示及自动完成特性的智能感知功能。
- 直接设置属性值的属性窗口。
服务器控件的属性
具有可视化功能的 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 | 当控件禁用时,获取或设置 CSS 类来应用呈现的 HTML 元素。 |
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 | 添加需要呈现指定 HtmlTextWriterTag 的 HTML 属性和样式。 |
AddedControl | 在子控件添加到控件对象的控件集合后调用。 |
AddParsedSubObject | 通报服务器控件一个元素,XML 或 HTML 已被解析,并将该元素添加到服务器控件的控件集合。 |
ApplyStyleSheetSkin | 将在页面样式表中定义的样式属性应用到控件中。 |
ClearCachedClientID | 基础设施。设置缓存的 ClientID 值设置为 null。 |
ClearChildControlState | 为服务器控件的子控件删除控件状态信息。 |
ClearChildState | 为所有服务器控件的子控件删除视图状态和控件状态信息。 |
ClearChildViewState | 为所有服务器控件的子控件删除视图状态信息。 |
CreateChildControls | 用于创建子控件。 |
CreateControlCollection | 创建一个用于保存子控件的新控件集合。 |
CreateControlStyle | 创建一个用于实现所有与样式有关的属性的样式对象。 |
DataBind | 将数据源绑定到服务器控件及其所有子控件。 |
DataBind(Boolean) | 将数据源及可以引发 DataBinding 事件的选项绑定到服务器控件及其所有子控件。 |
DataBindChildren | 将数据源绑定到服务器控件的子控件。 |
Dispose | 启用一个服务器控件在其从内存中释放出来前去执行最后的清理操作。 |
EnsureChildControls | 确定服务器控件是否包含子控件。若没有,则创建子控件。 |
EnsureID | 为没有标识符的控件创建一个标识符。 |
Equals(Object) | 确定指定对象是否等于当前对象。 |
Finalize | 允许一个对象去尝试释放资源并在对象被回收站回收前执行其他清理操作。 |
FindControl(String) | 搜索当前命名容器中具有指定 id 参数的服务器控件。 |
FindControl(String, Int32) | 搜索当前命名容器中具有指定 id 参数和整数的服务器控件。 |
Focus | 为控件设置输入焦点。 |
GetDesignModeState | 获取控件的设计时数据。 |
GetType | 获取当前实例的类型。 |
GetUniqueIDRelativeTo | 返回指定控件的唯一 ID 属性的预固定部分。 |
HasControls | 确定服务器控件是否包含子控件。 |
HasEvents | 表示事件是否被控件或其他子控件注册。 |
IsLiteralContent | 确定服务器控件是否仅含有文字内容。 |
LoadControlState | 恢复控件状态信息。 |
LoadViewState | 恢复视图状态信息。 |
MapPathSecure | 检索绝对的或相对的虚拟路径映射到的物理路径。 |
MemberwiseClone | 创建当前对象的浅复制。 |
MergeStyle | 复制指定样式的 Web 控件的任意非空白元素,但不覆盖该控件现有的任何样式元素。 |
OnBubbleEvent | 确定服务器控件的事件是否通过页面的 UI 服务器控件层级。 |
OnDataBinding | 引发数据绑定事件。 |
OnInit | 引发 Init 事件。 |
OnLoad | 引发加载事件。 |
OnPreRender | 引发 PreRender 事件。 |
OnUnload | 引发卸载事件。 |
OpenFile | 获取用于读取文件的流。 |
RemovedControl | 在子控件从控件对象的控件集合中移除后调用。 |
Render | 显示控件到指定的 HTML 作者。 |
RenderBeginTag | 显示控件的 HTML 开口标签到指定作者。 |
RenderChildren | 输出服务器控件子级的内容到提供的 HtmlTextWriter 对象中,从而编写呈现在客户端上的内容。 |
RenderContents | 显示控件内容到指定作者。 |
RenderControl(HtmlTextWriter) | 输出服务器控件内容到提供的 HtmlTextWriter 对象并在启用跟踪的情况下保存关于控件的跟踪信息。 |
RenderEndTag | 显示控件的 HTML 结束标签到指定作者。 |
ResolveAdapter | 获取负责呈现指定控件的控件适配器。 |
SaveControlState | 保存自页面回发到服务器后出现的服务器控件的状态改变。 |
SaveViewState | 保存调用 TrackViewState 方法之后修改的任意状态。 |
SetDesignModeState | 为控件设置设计时数据。 |
ToString | 返回代表当前对象的字符串。 |
TrackViewState | 引发控件跟踪其视图状态的变化,使其可以存储在该对象的视图状态属性中。 |
实例
让我们来看一看一个特定的服务器控件 - 树型视图控件。
树视图控件属于导航控件。
其他导航控件是:菜单控件和 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;
}
}
}
}
}
执行页面以观看效果,您将可以展开和折叠结点。
ASP.NET 文件上传
文件上传
本节介绍了 ASP.NET 中使用的两种向网页上传文件的方法。
ASP.NET 包含两个控件可以使用户向网页服务器上传文件。一旦服务器接受了上传的文件数据,那么应用程序就可以进行保存,进行检查或者忽略它。接下来的控件允许文件上传:
- HtmlInputFile - HTML 服务器控件
- FileUpload - ASP.NET 网页控件
两种控件都允许文件上传,但是 FileUpload 控件自动设置编码格式,然而 HtmlInputFile 控件并不会这样。
本指导中,我们将应用 FileUpload 控件。这个控件允许用户预览选择将要上传的文件,它提供了一个预览按钮和一个可以输入文件名的文本框。
一旦用户在文本框中输入文件名或者预览文件,FileUpload 控件的 SaveAs 方法就会将文件保存到硬盘。
FileUpload 的基本语法如下:
<asp:FileUpload ID= "Uploader" runat = "server" />
FileUpload 类是从 WebControl 类中得出的,并且它继承了它的所有元素,FileUpload 类具有以下这些只读属性:
属性 | 描述 |
---|---|
FileBytes | 返回一组将要上传文件的字节码 |
FileContent | 返回将要被上传的的文件的流对象 |
FileName | 返回将以上传的文件名称 |
HasFile | 判断控件是否有文件需要上传 |
PostedFile | 返回一个关于已上传文件的参考 |
发布的文件以 HttpPostedFile 形式的对象进行封装,这个对象可以通过 FileUpload 类的 PostedFile 属性被存取。
HttpPostedFile 类具有以下常用的属性:
属性 | 描述 |
---|---|
ContentLength | 返回已上传的文件的字节大小 |
ContentT ype | 返回已上传的文件的 MIME 类型 |
FileName | 返回文件全名 |
InputStream | 返回将要被上传的的文件的流对象 |
例子
下面的例子说明了 FileUpload 控件以及它的属性。这个表格有一个 FileUpload 控件以及一个保存按钮和一个真实文件名称、类型、长度的标签控件。
在设计模式下,表格如下图所示:
相关文件代码列示如下:
<body>
<form id="form1" runat="server">
<div>
<h3> File Upload:</h3>
<br />
<asp:FileUpload ID="FileUpload1" runat="server" />
<br /><br />
<asp:Button ID="btnsave" runat="server" onclick="btnsave_Click" Text="Save" style="width:85px" />
<br /><br />
<asp:Label ID="lblmessage" runat="server" />
</div>
</form>
</body>
保存按钮的代码列示如下:
protected void btnsave_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
if (FileUpload1.HasFile)
{
try
{
sb.AppendFormat(" Uploading file: {0}", FileUpload1.FileName);
//saving the file
FileUpload1.SaveAs("<c:\\SaveDirectory>" + FileUpload1.FileName);
//Showing the file information
sb.AppendFormat("<br/> Save As: {0}", FileUpload1.PostedFile.FileName);
sb.AppendFormat("<br/> File type: {0}", FileUpload1.PostedFile.ContentType);
sb.AppendFormat("<br/> File length: {0}", FileUpload1.PostedFile.ContentLength);
sb.AppendFormat("<br/> File name: {0}", FileUpload1.PostedFile.FileName);
}catch (Exception ex)
{
sb.Append("<br/> Error <br/>");
sb.AppendFormat("Unable to save file <br/> {0}", ex.Message);
}
}
else
{
lblmessage.Text = sb.ToString();
}
}
注意以下问题:
- StringBuilder 类是由 System.IO 命名空间产生,所以应该包括它。
- try 和 catch 区域是用来捕捉错误、显示错误信息的。
ASP.NET HTML 服务器
HTML 服务器
HTML 服务器控件主要是保证服务端运行的增强型标准 HTML 控件。HTML 控件不是由服务器处理,而是被发送到浏览器进行显示,比如页面标题标签,链接标签及输入元素。
通过添加 runat = "server" 属性和一个 id 属性,它们可被特定地转化为一个服务器控件,应用于服务器端处理。
例如,HTML 输入控件:
<input type="text" size="40">
它可以通过添加 runat 和 id 属性被转换成一个服务器控件:
<input type="text" id="testtext" size="40" runat="server">
使用 HTML 服务器控件的优点
尽管 ASP.NET 服务器控件可以完成 HTML 服务器控件执行的每一项工作,HTML 控件在以下情况仍然具有优势:
- 使用静态表达到布局目的。
- 转换一个 HTML 页面到 ASP.NET 下运行。
下面这个表格介绍了 HTML 服务器控件:
控件名称 | HTML 标签 |
---|---|
HtmlHead | <head>element |
HtmlInputButton | <input type=button|submit|reset> |
HtmlInputCheckbox | <input type=checkbox> |
HtmlInputFile | <input type = file> |
HtmlInputHidden | <input type = hidden> |
HtmlInputImage | <input type = image> |
HtmlInputPassword | <input type = password> |
HtmlInputRadioButton | <input type = radio> |
HtmlInputReset | <input type = reset> |
HtmlText | <input type = text|password> |
HtmlImage | <img> element |
HtmlLink | <link> element |
HtmlAnchor | <a> element |
HtmlButton | <button> element |
HtmlButton | <button> element |
HtmlForm | <form> element |
HtmlTable | <table> element |
HtmlTableCell | <td> and <th> |
HtmlTableRow | <tr> element |
HtmlTitle | <title> element |
HtmlSelect | <select&t; element |
HtmlGenericControl | 未列出的所有 HTML 控件 |
实例
以下实例使用了基本的 HTML 表格进行布局。它使用了用于从用户获得输入诸如姓名,地址,城市,州等的框,还有一个按钮控件,该控件被点击后能够获取该表最后一行中显示的用户数据。
页面在设计视图中应如下所示:
内容页面的代码表明了 HTML 表格元素进行布局的应用。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="htmlserver._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
.style1
{
width: 156px;
}
.style2
{
width: 332px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 54%;">
<tr>
<td class="style1">Name:</td>
<td class="style2">
<asp:TextBox ID="txtname" runat="server" style="width:230px">
</asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">Street</td>
<td class="style2">
<asp:TextBox ID="txtstreet" runat="server" style="width:230px">
</asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">City</td>
<td class="style2">
<asp:TextBox ID="txtcity" runat="server" style="width:230px">
</asp:TextBox>
</td>
</tr>
<tr>
<td class="style1">State</td>
<td class="style2">
<asp:TextBox ID="txtstate" runat="server" style="width:230px">
</asp:TextBox>
</td>
</tr>
<tr>
<td class="style1"> </td>
<td class="style2"></td>
</tr>
<tr>
<td class="style1"></td>
<td ID="displayrow" runat ="server" class="style2">
</td>
</tr>
</table>
</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Click" />
</form>
</body>
</html>
按钮控件的后台代码为:
protected void Button1_Click(object sender, EventArgs e)
{
string str = "";
str += txtname.Text + "<br />";
str += txtstreet.Text + "<br />";
str += txtcity.Text + "<br />";
str += txtstate.Text + "<br />";
displayrow.InnerHtml = str;
}
观察以下陈述:
- 标准 HTML 标签已被使用进行页面布局。
- HTML 表格的最后一行用于数据显示。它需要服务器端进行加工,因此为其添加 ID 属性和 runat 属性。
ASP.NET 广告轮转器
广告轮转器
广告轮转控制器从一个列表里随机选择在外部 XML 定时文件中指定的横幅图像。这个外部 XML 定时文件被叫做广告文件。
广告轮转控件允许你指定一个广告文件和窗口的类型,链接应该分别遵循 AdvertisementFile 和 Target 的属性。
添加 AdRotator 的基本语法如下:
<asp:AdRotator runat = "server" AdvertisementFile = "adfile.xml" Target = "_blank" />
在了解 AdRotator 控件以及它的属性之前,让我们先来看看广告文件的构成。
广告文件
广告文件是一种 XML 文件,它包括了广告所要被显示的信息。
可扩展标记语言(XML)是一种 W3C 的标准文本文档标记语言。它是一个基于文本的标记语言,它使您可以通过使用有意义的标签来让数据存储在结构化格式中。术语 'extensible' 意味着可以扩展功能,通过给应用程序定义有意义的标签来描述文档。
XML 本身不是一种语言,如 HTML ,而是一组用于创建新的标记语言的规则。它是一个元标记语言。它允许开发人员创建自定义标记集作特殊用途。它构建,存储并传输的信息。
下面是 XML 文件的一个例子:
<BOOK>
<NAME> Learn XML </NAME>
<AUTHOR> Samuel Peterson </AUTHOR>
<PUBLISHER> NSS Publications </PUBLISHER>
<PRICE> $30.00</PRICE>
</BOOK>
像所有的 XML 文件,该广告文件需要被具有良好定义并标记的结构化文本文件来描绘数据。这里也有一些在广告文件中常用的标准 XML 元素:
元素 | 描述 |
---|---|
Advertisements | 包围广告文件。 |
Ad | 界定独立的广告。 |
ImageUrl | 将要显示的图像的路径。 |
NavigateUrl | 当用户点击该广告时出现的链接。 |
AlternateText | 如果图像不能被显示,则会显示文本。 |
Keyword | 关键字用来识别一组广告,用于过滤。 |
Impressions | 该数字显示广告出现的频率。 |
Height | 显示图像的高度。 |
Width | 显示图像的宽度。 |
除了这些标签,带有一般属性的习惯性的标签也可以被包含进去。下面的代码演示了一个广告文件,ads.xml:
<Advertisements>
<Ad>
<ImageUrl>rose1.jpg</ImageUrl>
<NavigateUrl>http://www.1800flowers.com</NavigateUrl>
<AlternateText>
Order flowers, roses, gifts and more
</AlternateText>
<Impressions>20</Impressions>
<Keyword>flowers</Keyword>
</Ad>
<Ad>
<ImageUrl>rose2.jpg</ImageUrl>
<NavigateUrl>http://www.babybouquets.com.au</NavigateUrl>
<AlternateText>Order roses and flowers</AlternateText>
<Impressions>20</Impressions>
<Keyword>gifts</Keyword>
</Ad>
<Ad>
<ImageUrl>rose3.jpg</ImageUrl>
<NavigateUrl>http://www.flowers2moscow.com</NavigateUrl>
<AlternateText>Send flowers to Russia</AlternateText>
<Impressions>20</Impressions>
<Keyword>russia</Keyword>
</Ad>
<Ad>
<ImageUrl>rose4.jpg</ImageUrl>
<NavigateUrl>http://www.edibleblooms.com</NavigateUrl>
<AlternateText>Edible Blooms</AlternateText>
<Impressions>20</Impressions>
<Keyword>gifts</Keyword>
</Ad>
</Advertisements>
AdRotator 类的属性和事件
AdRotator 类是从 WebControl 类中派生的并且继承其属性。除了这些属性,AdRotator 类还具有以下属性:
属性 | 描述 |
---|---|
AdvertisementFile | 广告文件的路径。 |
AlternateTextFeild | 提供替代文本的域的元素名称。默认值是 Alternate Text。 |
DataMember | 当不使用广告文件时,要绑定的数据的特定列表的名称。 |
DataSource | 控制检索数据。 |
DataSourceID | 检索数据的控制 ID。 |
Font | 指定与广告横幅控件相关联的字体属性。 |
ImageUrlField | 提供 URL 图像的域的名称。默认值是 ImageUrl。 |
KeywordFilter | 只显示基于关键字的广告。 |
NavigateUrlField | 提供要导航到的 URL 的域的元素名称。默认值是 NavigateUrl。 |
Target | 显示链接的网页的内容的浏览器窗口或框架。 |
UniqueID | 获得 AdRotator 控件的唯一的、以分层形式限定的标识符。 |
以下是的 AdRotator 类的非常重要的事件:
事件 | 描述 |
---|---|
AdCreated | 每次往返服务器创建控件后,但是在页面渲染之前被触发。 |
DataBinding | 当服务器控件绑定到数据源时触发。 |
DataBound | 在服务器控件绑定到数据源之后发生。 |
Disposed | 当服务器控件从内存释放,在服务器控件生命周期的最后一个阶段请求 ASP.NET 页时触发。 |
Init | 当服务器控制被初始化时触发,其生命周期中的第一个步骤出现。 |
Load | 当服务器控件加载到 Page 对象中时触发。 |
PreRender | 加载 Control 对象之后,但在此之前呈现触发。 |
Unload | 当服务器控件从内存中卸载时触发。 |
使用 AdRotator 控件
创建一个新的网页,并在其上放置一个 AdRotator 控件。
<form id="form1" runat="server">
<div>
<asp:AdRotator ID="AdRotator1" runat="server" AdvertisementFile ="~/ads.xml" onadcreated="AdRotator1_AdCreated" />
</div>
</form>
该 ads.xml 文件和图像文件应该位于网站的根目录。
试着执行上述应用程序,并观察到页面每次重载时,广告都被改变。
ASP.NET 客户端
客户端
ASP.NET 的客户端编码有两方面:
- 客户端脚本:它在浏览器中运行并且依次加速页面的执行。例如,客户端数据有效性能够捕捉无效数据并相应地提醒用户而不经过在服务器中回发。
- 客户端源代码:ASP.NET 网页形成了该客户端源代码。例如,ASP.NET 网页的 HTML 源代码包含了若干隐藏区域并能自动注入 Java 描述语言代码,从而保留了信息像视图状态一样,或者进行其他工作保证网页正常运作。
客户端脚本
所有 ASP.NET 服务器控件都允许响应通过 Java 语言或者 VBS 语言绘制的编码。有些 ASP.NET 服务器控件端使用客户端脚本进行对用户需求的反应,而并没有回发到服务器。例如,数据有效性控件。
除了这些脚本,按钮控件具有恰当的 OnClientClick 方法,能够在按钮单击时执行客户端脚本。
传统服务器 HTML 控件有以下几个事件能够在脚本发起时执行脚本:
事件 | 属性 |
---|---|
onblur | 当控件失去焦点时触发 |
onfocus | 当控件获得焦点触发 |
onclick | 当控件被单击时触发 |
onchange | 当控件值发生改变时触发 |
onkeydown | 当用户按下键盘按钮时触发 |
onkeypress | 当用户按下字母数字的按键时 |
onkeyup | 当用户释放按键时触发 |
onmouseover | 当用户移动鼠标指针在控件界面时触发 |
onserverclick | 当控件界面被单击时,启动 ServerClick 事件控件 |
客户端源代码
我们已经在以上内容中讨论过了客户端源代码。ASP.NET 网页通常被编写在两种文件中:
- 内容文件或者审定文件(.aspx)
- 代码后置的文件
内容文件包含 HTML 或者 ASP.NET 控件标签和文字来形成页面结构。代码后置的文件包含了分类定义。在运行时间,内容文件被解析并被传送到一个页面类。
这个页面类以及在编码文件中的类的定义和系统生成的编码共同组成执行编码(集成),这些集成编码加工所有的回发数据,产生响应和发回客户动作。
思考一下这个简单页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="clientside._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Untitled Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Click" />
</div>
<hr />
<h3> <asp:Label ID="Msg" runat="server" Text=""> </asp:Label> </h3>
</form>
</body>
</html>
当这个页面在浏览器中运行时,View Source 选项显示了 HTML 网页并通过 ASP.Net 运行时间发送到浏览器:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>
Untitled Page
</title>
</head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUKMTU5MTA2ODYwOWRk31NudGDgvhhA7joJum9Qn5RxU2M=" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"
value="/wEWAwKpjZj0DALs0bLrBgKM54rGBhHsyM61rraxE+KnBTCS8cd1QDJ/"/>
</div>
<div>
<input name="TextBox1" type="text" id="TextBox1" />
<input type="submit" name="Button1" value="Click" id="Button1" />
</div>
<hr />
<h3><span id="Msg"></span></h3>
</form>
</body>
</html>
如果恰当地浏览编码,您就会发现前两个 \<div> 标签包含了存储的视图状态和有效数据的隐藏域。
ASP.NET 日历
日历
日历控件是一个功能丰富的网络控件,它提供了以下功能:
- 一次显示一个月
- 选择一天,一个星期或一个月
- 选择某范围之内的一天
- 在月份和月份之间移动
- 格式化的控制天数的显示
日历控件的基本的语法为:
<asp:Calender ID = "Calendar1" runat = "server">
</asp:Calender>
日历控件的属性和事件
日历控件有很多的属性和事件,使用它们你可以自定义操作并且控制显示。下表提供了日历控件的一些重要的属性:
属性 | 描述 |
---|---|
Caption | 获取或设置日历控件的标题。 |
CaptionAlign | 获取或设置标题的排列。 |
CellPadding | 获取或设置数据和单元格边界之间的空间。 |
CellSpacing | 获取或设置单元格之间的空间。 |
DayHeaderStyle | 获得样式属性来显示一星期中的一天。 |
DayNameFormat | 获取或设置星期中的日期。 |
DayStyle | 获取样式属性来显示月份中的日期。 |
FirstDayOfWeek | 获取或设置星期中的日期并显示在第一行。 |
NextMonthText | 获取或设置下个月的导航文本,默认值是 >。 |
NextPrevFormat | 获取或设置下个月或上个月的导航控件。 |
OtherMonthDayStyle | 获取没有显示在月份中的日期的样式属性。 |
PrevMonthText | 获取或设置上个月的导航文本,默认值是 <。 |
SelectedDate | 获取或设置选中的日期。 |
SelectedDates | 获取一个 DateTime 对象的集合代表所选日期。 |
SelectedDayStyle | 获取选中日期的样式属性。 |
SelectionMode | 获取或设置选择模式来指定用户是否可以选择一天,一周或是一个月。 |
SelectMonthText | 获取或设置在选择器列中的选择月份元素的文本。 |
SelectorStyle | 获取星期或月的选择器列的样式属性。 |
SelectWeekText | 获取或设置选择器列中的星期选择元素的文本显示。 |
ShowDayHeader | 获取或设置值,该值指示星期中日期的标题是否被显示。 |
ShowGridLines | 获取或设置值显示网格线是否会被显示。 |
ShowNextPrevMonth | 获取或设置一个值,该值指示下一个月和上一个月的导航元素是否在标题部分显示。 |
ShowTitle | 获取或设置一个值,该值指示标题部分是否被显示。 |
TitleFormat | 获取或设置标题的格式。 |
Titlestyle | 获取日期控件的标题的样式属性。 |
TodayDayStyle | 获取今天日期的样式属性。 |
TodaysDate | 获取或设置今天的日期的值。 |
UseAccessibleHeader | 获取或设置一个值,该值显示是否呈现表格标题 <th> HTML 元素给日期标头而不是表格数据 <td> HTML 元素。 |
VisibleDate | 获取或设置指定月的日期并显示。 |
WeekendDayStyle | 获取或设置周末日期的样式属性。 |
日期控件有以下三个最重要的事件来允许开发者编写日期控件。它们是:
事件 | 描述 |
---|---|
SelectionChanged | 当一天,一周或一个月被选中时,它会被触发。 |
DayRender | 日历控件的每一个数据单元呈现时,它会被触发。 |
VisibleMonthChanged | 用户更改月份时,它会被触发。 |
使用日历控件
使用一个没有任何代码的初始的日历控件给网站提供一个有效的日历,以显示一年中的月份和日期。它也含有下个月和上个月的导航。
日历控件允许用户选择一天,一周,或一整个月。这是通过使用 SelectionMode 属性来实现的。这个属性有以下值:
属性 | 描述 |
---|---|
Day | 选择一天。 |
DayWeek | 选择一天或一整个星期。 |
DayWeekMonth | 选择一天一星期或一整个月。 |
None | 什么也不能被选择。 |
选择日期的语法:
<asp:Calender ID = "Calendar1" runat = "server" SelectionMode="DayWeekMonth">
</asp:Calender>
当选择模式选择为 DayWeekMonth 时,会出现一个用符号 > 标识的额外的列来选择星期,并且 >> 符号出现在天名的左边来选择月份。
例子
下面的例子演示了选择一个日期并且显示在一个标签内:
内容文件代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="calendardemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Untitled Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3> Your Birthday:</h3>
<asp:Calendar ID="Calendar1" runat="server SelectionMode="DayWeekMonth" onselectionchanged="Calendar1_SelectionChanged">
</asp:Calendar>
</div>
<p>Todays date is:
<asp:Label ID="lblday" runat="server"></asp:Label>
</p>
<p>Your Birday is:
<asp:Label ID="lblbday" runat="server"></asp:Label>
</p>
</form>
</body>
</html>
事件处理程序的事件 SelectionChanged:
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
lblday.Text = Calendar1.TodaysDate.ToShortDateString();
lblbday.Text = Calendar1.SelectedDate.ToShortDateString();
}
运行该文件时,它将生成以下输出:
ASP.NET 基础控件
基础控件
这在一章节,我们将讨论在 ASP.NET 中有效的基础控件。
按钮控件
ASP.NET 提供了三种不同类型的按钮控件:
- 按钮:在矩形区域内显示文本。
- 链接按钮:像超链接一样显示文本。
- 图像按钮:显示图像。
当用户单击一个按钮时,两个事件被触发:单击和指令。
按钮控件的基础语法:
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Click" / >
按钮控件的通用属性:
属性 | 描述 |
---|---|
Text | 文本显示在按钮上。仅对于按钮和链环按钮的控件。 |
ImageUrl | 仅对于图像按钮控件。这个图像是为了显示按钮。 |
AlternateText | 仅对于图像按钮控件。如果浏览器无法显示图像,替换文本会显示。 |
CausesValidation | 当用户单击按钮时确定是否执行页面验证。默认为真。 |
CommandName | 当用户单击按钮时传递给命令事件的字符串值。 |
CommandArgument | 当用户单击按钮时传递给命令事件的字符串值。 |
PostBackUrl | 当用户单击按钮时出现需要的页面地址。 |
文本框和标签
文本框控件是专门接受用户输入而设置。一个文本框控件可以依据文本模式的属性接受一条或多条文本的输入。
标签控件为显示文本提供了一个简单的方法,这种方法能够从执行一个页面到下一个页面。如果想要显示一个不变的文本,那么您可以使用文字文本。
正文控制的基本语法:
<asp:TextBox ID="txtstate" runat="server" ></asp:TextBox>
文本框和标签的通用属性:
属性 | 描述 |
---|---|
TextMode | 指定文本框类型。单行模式创建标准文本,多行模式创建能够接受多个文本,口令会引发输入待标记的字符。默认为标准文本。 |
Text | 文本框的文本内容。 |
MaxLength | 输入文本框中文本字符的最大值。 |
Wrap | 它确定多行文本框中文本是否自动换行的;默认值是真。 |
ReadOnly | 确定用户是否可以更改框中的文本;默认为假,即用户可以更改文本。 |
Columns | 在字符的文本框的宽度。实际宽度是基于用于文本输入的字体来确定。 |
Rows | 多行文本框的高度。默认值是 0,表示一个单行文本框。 |
大多使用属性的标签控件是 'Text',它代表在标签上显示的文本。
复选框和单选按钮
一个复选框将显示一个选项,用户可以选中或取消。单选按钮呈现一组用户可以只选择一个选项的选项组。
如果要创建一组单选按钮,您可以为每个单选按钮组中的组名属性指定相同的名称。如果一个以上的组需要呈现一个单一的形式,则指定每个组不同的组的名称。
如果您想按照最初显示的形式来选中复选框或单选按钮,可将其选中属性为 true。如果多个单选按钮在一组的属性设置为 true,则只有最后一个被认为是 true。
复选框的基本语法:
<asp:CheckBox ID= "chkoption" runat= "Server">
</asp:CheckBox>
单选按钮的基本语法:
<asp:RadioButton ID= "rdboption" runat= "Server">
</asp: RadioButton>
复选框和单选按钮的通用属性:
属性 | 描述 |
---|---|
Text | 在复选框或单选按钮旁边显示的文本。 |
Checked | 制定是否被选中,默认为未选中。 |
GroupName | 控件归属组的名称。 |
列表控件
ASP.NET 提供以下控件:
- 下拉式列表,
- 列表框,
- 单选按钮列表,
- 复选框列表,
- 项目符号列表。
这些控件让用户可以从一个或多个项目列表中选择。列表框和下拉列表包含一个或多个列表项。这些列表可以通过代码或者由 ListItemCollection 编辑器被加载。
列表框控件的基本语法:
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged">
</asp:ListBox>
下拉列表控件的基本语法:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
列表框和下拉列表的通用属性:
属性 | 描述 |
---|---|
Items | 代表了控件内项目的 ListItem 对象的集合。此属性回传 ListItemCollection 类型的对象。 |
Rows | 指定在框中显示的项目数。如果实际的列表中比显示的列表包含更多的行,则滚动条会被添加。 |
SelectedIndex | 当前所选项目的索引。如果一个以上的项目被选择,则第一个索引选择项目。如果没有选择项目,此属性的值为 -1。 |
SelectedValue | 当前选定项的值。如果一个以上的项目被选择,则第一项的值被选择。如果没有选中的项,该属性的值是一个空字符串("")。 |
SelectionMode | 表示一个列表框是否允许单个选择或多个选择。 |
每个列表项对象的通用属性:
属性 | 描述 |
---|---|
Text | 为项目所显示的文本。 |
Selected | 表示项目是否被选定。 |
Value | 与项目相关的一串字符。 |
需要重点关注的是:
- 如果您要在一个下拉列表或列表框中的项目工作,则需使用该控件的项目属性。此属性返回一个 ListItemCollection 对象,它包含该列表的所有项目。
- 当用户从下拉列表或列表框中选择一个不同的项目时,SelectedIndexChanged 事件被引发。
ListItemCollection
ListItemCollection 对象是 ListItem 对象的集合。每个 ListItem 对象代表列表中的一个项目。在一个 ListItemCollection 中项目编号从 0 开始。
当一个列表框中的项目被加载过程中使用的字符串是比如:lstcolor.Items.Add ("Blue") 时,那么文字和列表项的值的属性设置是您指定的字符串值。为了以不同的方式设置,你必须创建一个列表项的对象,然后添加该项目到集合。
ListItemCollection 编辑器用于将项目添加到一个下拉列表或列表框。它被用来创建项目的静态列表。若要显示集合编辑器,则从智能标签菜单中选择编辑项目,或者选择控件,然后在属性窗口的项目属性中单击省略号按钮。
ListItemCollection 的通用属性:
属性 | 描述 |
---|---|
Item(integer) | 表示在指定索引处的项目的 ListItem 对象。 |
Count | 在集合中项目的个数。 |
ListItemCollection 的基本方法:
方法 | 描述 |
---|---|
Add(string) | 在集合的末端增加一个新的项目并为项目文本属性分配字符串参数。 |
Add(ListItem) | 在集合末端添加一个新的项目。 |
Insert(integer, string) | 在集合中指定索引位置插入项目,并为项目文本属性分配字符串参数。 |
Insert(integer, ListItem) | 在集合中指定索引中的位置插入项目。 |
Remove(string) | 移除与文本值相同的字符串的项目。 |
Remove(ListItem) | 移除指定的项目。 |
RemoveAt(integer) | 作为整数移除在指定索引中的项目。 |
Clear | 移除集合中所有项目。 |
FindByValue(string) | 传回与字符串值相同的项目。 |
FindByValue(Text) | 传回与字符串文本相同的项目。 |
单选按钮列表和复选框列表
单选按钮列表呈现互相排斥的选项列表。一个复选框列表列呈现独立选项的列表。这些控件包含 ListItem 对象的集合,它们可以通过控件的项目属性被参考。
单选按钮列表的基本语法:
<asp:RadioButtonList ID="RadioButtonList1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
</asp:RadioButtonList>
复选框列表的基本语法:
<asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
</asp:CheckBoxList>
复选框和单选按钮列表的通用属性:
属性 | 描述 |
---|---|
RepeatLayout | 该属性指定在提出格式化列表过程中是否使用标签或普通 HTML 流。默认为表格。 |
RepeatDirection | 它指定了方向,在该方向中控件可以被重复。可用的值是水平和垂直。默认是垂直的。 |
RepeatColumns | 当重复控件时,它指定了列的数字;默认为 0。 |
项目符号列表和编号列表
项目符号列表控件创建项目符号列表或编号列表。这些控件包含 ListItem 对象的集合,它们可以通过控件的项目属性被参考。
项目符号列表的基本语法:
<asp:BulletedList ID="BulletedList1" runat="server">
</asp:BulletedList>
项目符号列表的通用属性:
属性 | 描述 |
---|---|
BulletStyle | 该属性指定样式和项目编号的外观或者数字。 |
RepeatDirection | 它指定了方向,在该方向中控件可以被重复。可用的值是水平和垂直。默认是垂直的。 |
RepeatColumns | 当重复控件时,它指定了列的数字;默认为 0。 |
超链接控件
超链接控件就像 HTML <a>
元素。
超链接控件的基本语法:
<asp:HyperLink ID="HyperLink1" runat="server">
HyperLink
</asp:HyperLink>
它具有以下属性:
属性 | 描述 |
---|---|
ImageUrl | 由控件显示的图像的路径。 |
NavigateUrl | 目标链接地址。 |
Text | 作为链接显示的文本。 |
Target | 加载链接页面的窗口或框架。 |
图像控件
若图片无法显示,图像控件则在网页,或者一些替代文本上显示图片。
图像控件的基本语法:
<asp:Image ID="Image1" runat="server">
它具有以下重要属性:
属性 | 描述 |
---|---|
AlternateText | 图片不存在时显示替代文本。 |
ImageAlign | 对齐选项控件。 |
ImageUrl | 由控件显示的图像的路径。 |
ASP.NET 多视图
多视图
MultiView 和 View 控件允许你将一个页面的内容分成不同的组,一次只显示一组。每个视图控件管理一个组的内容,并且所有视图控件包括在 MultiView 控件中。
多视图控件一次只负责显示一个视图。视图显示称为活动视图。
MultiView 控件的语法是:
<asp:MultView ID= "MultiView1" runat= "server">
</asp:MultiView>
View 控制的语法是:
<asp:View ID= "View1" runat= "server">
</asp:View>
然而,该控件不能自行存在。如果您尝试单独使用它会出现错误。它总是和一个多视点控制器一起使用:
<asp:MultView ID= "MultiView1" runat= "server">
<asp:View ID= "View1" runat= "server"> </asp:View>
</asp:MultiView>
View 和 MultiView 控件的属性
视图和多视图控件都来源于 Control 类。并继承其所有属性、方法和事件。视图控件的最重要属性是可视 Boolean 属性,它设置了一个视图的可见性。
多视图控件具有以下重要特性:
属性 | 描述 |
---|---|
Views | 集多视图在内的视图控件。 |
ActiveViewIndex | 从零开始的索引,它表示该活动视图。如果没有视图处于活动状态,那么索引值为 -1。 |
与 MultiView 控件的导航相关的按钮控制 CommandName 属性都与 MultiView 控件的一些相关字段关联。
例如,如果一个按钮控制的 CommandName 值作为与多视图的导航相关,单击按钮时它会自动导航到下一个视图中。
下表显示了上述属性的默认命令名:
元素 | 描述 |
---|---|
NextViewCommandName | 下一视图 |
PreviousViewCommandName | 上一视图 |
SwitchViewByIDCommandName | SwitchViewByID |
SwitchViewByIndexCommandName | SwitchViewByIndex |
多视点控制的重要方法是:
方法 | 描述 |
---|---|
SetActiveview | 设置活动视图 |
GetActiveview | 检索活动视图 |
每一个视图改变时,页面被回传到服务器,同时一些事件被引发。一些重要的事件是:
事件 | 描述 |
---|---|
ActiveViewChanged | 当一个视图发生改变时触发 |
Activate | 通过活跃视图触发 |
Deactivate | 通过不活跃视图触发 |
除了上面提到的属性、方法和事件,多视图控件继承了控制和对象类的成员。
例子
示例页面有三个视图。每个视图的导航视图有两个按钮。
内容文件的代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="multiviewdemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Untitled Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>MultiView and View Controls</h2>
<asp:DropDownList ID="DropDownList1" runat="server" onselectedindexchanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<hr />
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="2" onactiveviewchanged="MultiView1_ActiveViewChanged" >
<asp:View ID="View1" runat="server">
<h3>This is view 1</h3>
<br />
<asp:Button CommandName="NextView" ID="btnnext1" runat="server" Text = "Go To Next" />
<asp:Button CommandArgument="View3" CommandName="SwitchViewByID" ID="btnlast" runat="server" Text ="Go To Last" />
</asp:View>
<asp:View ID="View2" runat="server">
<h3>This is view 2</h3>
<asp:Button CommandName="NextView" ID="btnnext2" runat="server" Text = "Go To Next" />
<asp:Button CommandName="PrevView" ID="btnprevious2" runat="server" Text = "Go To Previous View" />
</asp:View>
<asp:View ID="View3" runat="server">
<h3> This is view 3</h3>
<br />
<asp:Calendar ID="Calender1" runat="server"></asp:Calendar>
<br />
<asp:Button CommandArgument="0" CommandName="SwitchViewByIndex" ID="btnfirst" runat="server" Text = "Go To Next" />
<asp:Button CommandName="PrevView" ID="btnprevious" runat="server" Text = "Go To Previous View" />
</asp:View>
</asp:MultiView>
</div>
</form>
</body>
</html>
注意以下事项:
MultiView.ActiveViewIndex 确定了哪些视图将要显示。这是页面上呈现的唯一视图。没有视图显示时 ActiveViewIndex 的默认值是 -1。 由于范例中 ActiveViewIndex 被定义为 2,所以被执行时它显示的是第三个视图。
ASP.NET 指令
指令
ASP.NET 指令是指定可选设置的说明,如注册一个自定义的控制和页面的语言。这些设置介绍了 NET Framework 如何处理单页表单(.aspx)或用户控件(.ascx)网页。
下达指令的基本语法:
<%@ directive_name attribute=value [attribute=value] %>
在这一部分中,我们将介绍 ASP.NET 指令,同时会在整个教程中应用大多数指令。
应用程序指令
应用指令定义特定应用程序的属性。它是在 global.aspx 文件的顶部提供。
应用程序指令的基本语法:
<%@ Application Language="C#" %>
应用程序指令的属性:
属性 | 描述 |
---|---|
Inherits | 从类的名称中继承。 |
Description | 应用的文本描述。解析器和编译器忽略这一点。 |
Language | 应用在代码组中的语言。 |
集合指令
集合指令链接着一个网页链接的组件或在分析时的应用程序。这可能会出现在整个应用类型链接 Global.asax 文件中,页面文件中,用于链接到另一个网页的用户控件中或用户控件中。
集合控件的基本语法是:
<%@ Assembly Name ="myassembly" %>
集合控件的属性是:
属性 | 描述 |
---|---|
Name | 被链接的集合组件的名称。 |
Src | 源文件被动态链接和编辑的路径。 |
控制指令
控制指令是与用户控件一同使用并出现在用户控件(.ascx)文件中。
控制指令的基本语法是:
<%@ Control Language="C#" EnableViewState="false" %>
控制指令的属性是:
属性 | 描述 |
---|---|
AutoEventWireup | 允许或禁用事件处理程序的自动关联的布尔值。 |
ClassName | 控件的文件名。 |
Debug | 许或禁用编辑调试符号的布尔值。 |
Description | 控制页面的文字说明,被编译器忽略。 |
EnableViewState | 页面请求为是否保持视图状态的布尔值。 |
Explicit | 在 VB 语言下,告知编辑器使用选项显示模式。 |
Inherits | 控制页面继承的类。 |
Language | 编码和脚本的语言。 |
Src | 代码隐藏类的文件名。 |
Strict | 在 VB 语言下,告知编辑器使用选项标准模式。 |
工具指令
工具指令表明网页,母版页或者用户控制页必须执行具有详细说明的.Net 框架界面。
工具指令的基本语法是:
<%@ Implements Interface="interface_name" %>
导入指令
导入指令导入一个命名空间到用户控制应用程序的页面。如果在 global.asax 文件中指定了 Import 指令,那么会将其应用到整个应用程序。如果它是在用户控制页面的网页中,则会将其应用到该网页或控件中。
导入指令的基本语法是:
<%@ namespace="System.Drawing" %>
主要指令
主要指令指定了一个页面文件作为主页。
样本主页指令的基本语法是:
<%@ MasterPage Language="C#" AutoEventWireup="true" CodeFile="SiteMater.master.cs" Inherits="SiteMaster" %>
MasterType 指令
MasterType 指令指定一个类名到页面的主属性,强化其类型。
母版式指令的基本语法是:
<%@ MasterType attribute="value"[attribute="value" ...] %>
输出缓存指令
输出缓存指令控制网页或用户控件的输出缓存策略。
输出缓存指令的基本语法:
<%@ OutputCache Duration="15" VaryByParam="None" %>
页面指令
页面指令定义特定的页面分析器和编译器的页面文件的属性。
页面指令的基本语法是:
%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Trace="true" %>
页面指令的属性是:
属性 | 描述 |
---|---|
AutoEventWireup | 允许或禁用正在自动绑定到方法页面事件的布尔值;例如,Page_Load。 |
Buffer | 允许或禁用 HTTP 响应缓冲的布尔值。 |
ClassName | 页面的类别名称。 |
ClientTarget | 服务器控件应呈现的内容的浏览器 |
CodeFile | 代码隐藏文件的名称。 |
Debug | 允许或禁止使用调试符号编译的布尔值。 |
Description | 页面的文件说明,由解析器忽略。 |
EnableSessionState | 启用或禁用页面会话状态为只读。 |
EnableViewState | 允许或禁止跨页请求视图状态的布尔值。 |
ErrorPage | 未经处理的页面异常发生的情况下的重定地址。 |
Inherits | 后台代码或其他类的名称。 |
Language | 代码的编程语言。 |
Src | 后台代码类的文件名。 |
Trace | 启用或禁用跟踪。 |
TraceMode | 表示跟踪信息的显示方式,并按照时间或者类别排序。 |
Transaction | 表示交易是否被支持。 |
ValidateRequest | 表示所有输入数据是否被有效验证为 hardcoded 列表值得布尔值。 |
前页型指令
前页型指令为一个页面分配类别,使得该页面类型被强化。
前页型指令的样本的基本语法:
<%@ PreviousPageType attribute="value"[attribute="value" ...] %>
参考指令
参考指令表明另一个页面或用户控件应编译和链接到当前页面。
参考指令的基本语法是:
<%@ Reference Page ="somepage.aspx" %>
注册指令
注册指令用于注册定制服务器控件和用户控件。
注册指令的基本语法是:
<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
ASP.NET Panel 控件
Panel 控件
Panel 控件可以作为一个页面上的其他控件的容器。它控制其包含的控件的外观和可视度。它还允许生成控件编程。
面板控件的基本语法如下:
<asp:Panel ID= "Panel1" runat = "server">
</asp:Panel>
面板控件从 WebControl 类派生。因此,它同样地继承了所有的属性、方法和事件。它不具有任何自己的方法或事件。然而,它有自己的以下属性:
属性 | 描述 |
---|---|
BackImageUrl | 面板背景图像的地址。 |
DefaultButton | 获取或设置包含在 Panel 控件的默认按钮的标识符。 |
Direction | 面板中的文本方向。 |
GroupingText | 允许文本作为一个字段分组。 |
HorizontalAlign | 水平对齐面板中的内容。 |
ScrollBars | 指定面板内滚动条的可见性和位置。 |
Wrap | 允许文本换行。 |
使用面板控件
让我们从一个具体的高度和宽度、边框样式简单的滚动面板开始。滚动条属性设置为两个滚动条,因此两个滚动条同时被呈现。
源文件具有如下的面板标签代码:
<asp:Panel ID="Panel1" runat="server" BorderColor="#990000" BorderStyle="Solid"
Borderstyle="width:1px" Height="116px" ScrollBars="Both" style="width:278px">
This is a scrollable panel.
<br />
<br />
<asp:Button ID="btnpanel" runat="server" Text="Button" style="width:82px" />
</asp:Panel>
面板呈现如下:
例子
下面的例子演示了动态内容生成。用户提供要在面板上产生的标签控件和文本框的数目。控件以编程方式生成。
用属性窗口更改面板属性。当您在设计视图中选择一个控件时,该属性窗口中将显示特定控件的属性,并允许您更改,而无需键入。
示例的源文件如下:
<form id="form1" runat="server">
<div>
<asp:Panel ID="pnldynamic" runat="server" BorderColor="#990000"
BorderStyle="Solid" Borderstyle="width:1px" Height="150px" ScrollBars="Auto" style="width:60%" BackColor="#CCCCFF" Font-Names="Courier" HorizontalAlign="Center">
This panel shows dynamic control generation:
<br />
<br />
</asp:Panel>
</div>
<table style="width: 51%;">
<tr>
<td class="style2">No of Labels:</td>
<td class="style1">
<asp:DropDownList ID="ddllabels" runat="server">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="style2"> </td>
<td class="style1"> </td>
</tr>
<tr>
<td class="style2">No of Text Boxes :</td>
<td class="style1">
<asp:DropDownList ID="ddltextbox" runat="server">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem Value="1"></asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem Value="4"></asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<tr>
<td class="style2"> </td>
<td class="style1"> </td>
</tr>
<tr>
<td class="style2">
<asp:CheckBox ID="chkvisible" runat="server"
Text="Make the Panel Visible" />
</td>
<td class="style1">
<asp:Button ID="btnrefresh" runat="server" Text="Refresh Panel"
style="width:129px" />
</td>
</tr>
</table>
</form>
在 Page_Load 事件背后的负责动态生成的控件的源代码为:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//make the panel visible
pnldynamic.Visible = chkvisible.Checked;
//generating the lable controls:
int n = Int32.Parse(ddllabels.SelectedItem.Value);
for (int i = 1; i <= n; i++)
{
Label lbl = new Label();
lbl.Text = "Label" + (i).ToString();
pnldynamic.Controls.Add(lbl);
pnldynamic.Controls.Add(new LiteralControl("<br />"));
}
//generating the text box controls:
int m = Int32.Parse(ddltextbox.SelectedItem.Value);
for (int i = 1; i <= m; i++)
{
TextBox txt = new TextBox();
txt.Text = "Text Box" + (i).ToString();
pnldynamic.Controls.Add(txt);
pnldynamic.Controls.Add(new LiteralControl("<br />"));
}
}
}
当被执行时,面板呈现为:
ASP.NET 管理状态
管理状态
超文本传输协议(HTTP)是一种无状态协议。当客户端从服务器断开连接时,ASP.NET 引擎将丢弃页面对象。这样一来,每个 Web 应用程序能够扩展到同时用于大量请求,但是不会耗尽服务器内存。
然而,需要有一些技术来存储各个请求之间的信息并在需要时取回。这个信息则称为状态,即所有控件的当前值和在当前会话中当前用户使用的变量。
ASP.NET 管理四种状态:
- 视图状态
- 控制状态
- 会话状态
- 应用程序状态
视图状态
视图状态是页面及其所有控件的状态。它通过 ASP.NET 框架的反馈保持不变。
当一个页面被发送回客户端,这些页面变化的属性及其控件是确定的,并存储在名为 _VIEWSTATE 的一个隐藏输入字段的值内。当页面被再次回发时,_VIEWSTATE 字段随 HTTP 请求被发送到服务器。
视图状态可以对以下内容启用或者禁用:
- 整个应用程序:设置 web.config 文件中 部分的 EnableViewState 属性。
- 一个页面:设置页面指令的 EnableViewState 属性为 <%@ Page Language="C#" EnableViewState="false" %>
- 一个控件:设置控件 .EnableViewState 属性。
它通过使用视图状态对象,该对象是由被一组视图状态项目定义的 StateBag 类别定义的。该 StateBag 是一种数据结构,包含属性值对并被存储为与对象相关联的字符串。
StateBag 类具有以下属性:
属性 | 描述 |
---|---|
Item(name) | 具有指定名称的视图状态的值,是 StateBag 的默认属性。 |
Count | 状态集合中的项目名称。 |
Keys | 集合中所有项目的密钥集合。 |
Values | 集合中所有项目的值的集合。 |
StateBag 类具有以下方法:
方法 | 描述 |
---|---|
Add(name, value) | 添加一个项目到视图状态集合,更新现有项目。 |
Clear | 移除集合中所有项目。 |
Equals(Object) | 确定指定的对象是否等于当前对象。 |
Finalize | 允许释放资源并执行其他清理操作。 |
GetEnumerator | 返回存储在 StateBag 对象中重复的 StateItem 对象的密钥/值对的计数器。 |
GetType | 获取当前实例的类型。 |
IsItemDirty | 检查存储在 StateBag 对象以确认其是否已被修改。 |
Remove(name) | 移除制定项目。 |
SetDirty | 设置 StateBag 对象的状态以及每个由其包含的 StateItem 对象的 Dirty 属性。 |
SetItemDirty | 为在 StateBag 对象中的指定 StateItem 对象设置 Dirty 属性。 |
ToString | 返回代表状态包对象的字符串。 |
实例
以下实例说明了存储视图状态的字符串的概念。
让我们保持一个计数器,通过点击页面上的一个按钮,该计数器能够在每次页面被调回时递增。标签控件显示计数器的值。
标记文件代码如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Untitled Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>View State demo</h3>
Page Counter:
<asp:Label ID="lblCounter" runat="server" />
<asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" />
</div>
</form>
</body>
</html>
该实例的后台代码文件如下所示:
public partial class _Default : System.Web.UI.Page
{
public int counter
{
get
{
if (ViewState["pcounter"] != null)
{
return ((int)ViewState["pcounter"]);
}
else
{
return 0;
}
}
set
{
ViewState["pcounter"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
lblCounter.Text = counter.ToString();
counter++;
}
}
它将会生成以下结果:
控制状态
控制状态不能被直接修改,存取或禁用。
会话状态
当用户连接到 ASP.NET 网站,一个新的会话对象将被创建。当会话状态开启时,新的会话状态会为每一个新的请求而创建。这种会话状态对象会成为运行环境中的一部分并可通过页面使用。
会话状态通常用于存储应用程序数据,比如详细目录,供应商清单,客户记录或购物车。它可以存储用户的信息及其偏好信息,并保存用户未决定的路径。
会话由 120 位的 SessionID 识别和跟踪,从客户端传递到服务器并且作为 cookie 或修改的 URL 回传。SessionID 是全球唯一的,随机的。
会话状态对象由 HttpSessionState 类创建,它定义会话状态项集合。
HttpSessionState 类具有以下属性:
属性 | 描述 |
---|---|
SessionID | 唯一的会话标识符。 |
Item(name) | 具有指定名称的会话状态项的值,是 HttpSessionState 类的默认属性。 |
Count | 会话状态集合中项的数量。 |
TimeOut | 获取和设置时间量,几分钟内,在供应商停止会话状态前在请求间被允许。 |
HttpSessionState 类有以下方法:
方法 | 描述 |
---|---|
Add(name, value) | 添加新的项到会话状态集合。 |
Clear | 移除会话状态集合中所有项。 |
Remove(name) | 移除会话状态集合中的指定项。 |
RemoveAll | 移除会话状态集合中所有密钥和值。 |
RemoveAt | 从会话状态集合中删除指定索引处的项。 |
会话状态对象是一个名 - 值对,它可以从会话状态对象中存储和检索信息。同样地,您可以使用以下代码:
void StoreSessionInfo()
{
String fromuser = TextBox1.Text;
Session["fromuser"] = fromuser;
}
void RetrieveSessionInfo()
{
String fromuser = Session["fromuser"];
Label1.Text = fromuser;
}
以上代码只存储在会话词典对象中的字符串,但是,它可以存储所有原始数据类型和由原始数据类型组成的阵列,DataSet, DataTable, HashTable, 和图像对象,以及继承 ISerializable 对象的任意用户定义的类。
实例
以下实例说明了存储会话状态的概念。在页面上有两个按钮:输入字符串的文本框按钮和显示从最后一个会话中存储的文本的标签按钮。标记文件代码如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>
Untitled Page
</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 568px; height: 103px">
<tr>
<td style="width: 209px">
<asp:Label ID="lblstr" runat="server" Text="Enter a String" style="width:94px">
</asp:Label>
</td>
<td style="width: 317px">
<asp:TextBox ID="txtstr" runat="server" style="width:227px">
</asp:TextBox>
</td>
</tr>
<tr>
<td style="width: 209px"> </td>
<td style="width: 317px"> </td>
</tr>
<tr>
<td style="width: 209px">
<asp:Button ID="btnnrm" runat="server"
Text="No action button" style="width:128px" />
</td>
<td style="width: 317px">
<asp:Button ID="btnstr" runat="server"
OnClick="btnstr_Click" Text="Submit the String" />
</td>
</tr>
<tr>
<td style="width: 209px"> </td>
<td style="width: 317px"> </td>
</tr>
<tr>
<td style="width: 209px">
<asp:Label ID="lblsession" runat="server" style="width:231px" >
</asp:Label>
</td>
<td style="width: 317px"> </td>
</tr>
<tr>
<td style="width: 209px">
<asp:Label ID="lblshstr" runat="server">
</asp:Label>
</td>
<td style="width: 317px"> </td>
</tr>
</table>
</div>
</form>
</body>
</html>
在设计视图中应有如下显示:
后台代码如下:
public partial class _Default : System.Web.UI.Page
{
String mystr;
protected void Page_Load(object sender, EventArgs e)
{
this.lblshstr.Text = this.mystr;
this.lblsession.Text = (String)this.Session["str"];
}
protected void btnstr_Click(object sender, EventArgs e)
{
this.mystr = this.txtstr.Text;
this.Session["str"] = this.txtstr.Text;
this.lblshstr.Text = this.mystr;
this.lblsession.Text = (String)this.Session["str"];
}
}
执行文件并观察其如何运行:
应用程序状态
ASP.NET 应用程序是在 Web 服务器上所有网页,代码和单个虚拟目录的其他文件的集合。当信息被存储在应用程序状态,它可以供所有用户使用。
为了提供应用程序状态的使用,ASP.NET 从 HttpApplicationState 类中为每个应用程序创建一个应用程序状态对象,并将该对象存储在服务器内存中。该对象是由类文件 global.asax 表示。
应用程序状态主要被用于存储计数器,其他统计数据及税率,折扣率等所有应用程序数据,并存储用户访问网站的路径。
HttpApplicationState 类具有以下属性:
属性 | 描述 |
---|---|
Item(name) | 具有指定名称的应用程序项的值,是 HttpApplicationState 的默认属性。 |
Count | 应用程序状态集合中项的数量。 |
HttpApplicationState 类具有以下方法:
方法 | 描述 |
---|---|
Add(name, value) | 添加新的项目到应用程序状态集合。 |
Clear | 移除应用程序状态集合中的所有项。 |
Remove(name) | 移除应用程序状态集合中的指定项。 |
RemoveAll | 移除一个 HttpApplicationState 集合中所有对象。 |
RemoveAt | 移除从由索引找到的集合中的一个 HttpApplicationState 对象。 |
Lock() | 锁定应用程序状态集合以便只有当前用户可以访问。 |
Unlock() | 解锁应用程序状态集合以便所有用户可以访问。 |
应用程序状态的数据通常是由为事件编写的处理程序维护:
- 应用程序开启
- 应用程序结束
- 应用程序错误
- 会话开始
- 会话结束
以下代码片段展示了用于存储应用程序状态信息的基本语法:
Void Application_Start(object sender, EventArgs e)
{
Application["startMessage"] = "The application has started.";
}
Void Application_End(object sender, EventArgs e)
{
Application["endtMessage"] = "The application has ended.";
}
ASP.NET Ajax 控制
Ajax 控制
AJAX 代表 Asynchronous JavaScript and XML。这是一项跨平台的能加速响应时间的技术。AJAX 服务器控件将脚本添加到页面,它由浏览器执行并处理。
然而像其他 ASP.NET 服务器控件一样,这些 AJAX 服务器控件也能拥有与它们相联系的方法和事件句柄,它们都在服务器端处理。
在 Visual Studio IDE 里的 control 工具箱含有一组叫作 'AJAX' 的控制组件。
ScriptManager 控件
ScriptManager 控件是最重要的控件并且必须出现在页面上以让其他控件工作。
它有基本语法:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
如果你创建一个 'Ajax Enabled site' 或者从 'Add Item' 对话框添加一个 'AJAX Web Form',网页将自动形成,并包含 script manager 控件。ScriptManager 控件为所有的服务器端的控件照顾客户机端的脚本。
UpdatePanel 控件
UpdatePanel 控件是一个容器控件并且源自 Control 类。它作为它里面的子控件的容器而运作并且不拥有它自己的接口。当它其中的一个控件触发提交回来,UpdatePanel 干预异步启动并更新部分页面。
例如,如果一个 button 控件在 update panel 内,并且它被点击了,只有 update panel 内的控件将被影响,页面其他部分的控件将不会被影响。这被叫做部分提交返回或者异步提交返回。
例子
在你的应用程序中添加一个 AJAX 网页表单。它包含默认的 script manager 控件。插入一个 update panel。将一个 button 控件和一个 label 标签放置在 update panel 控件内。将另一个 button 和 label 集放置在 panel 外。
设计视图如下所示:
资源文件如下所示:
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="btnpartial" runat="server" onclick="btnpartial_Click" Text="Partial PostBack"/>
<br />
<br />
<asp:Label ID="lblpartial" runat="server"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<p> </p>
<p>Outside the Update Panel</p>
<p>
<asp:Button ID="btntotal" runat="server" onclick="btntotal_Click" Text="Total PostBack" />
</p>
<asp:Label ID="lbltotal" runat="server"></asp:Label>
</form>
button 控件对时间处理程序都拥有相同的代码:
string time = DateTime.Now.ToLongTimeString();
lblpartial.Text = "Showing time from panel" + time;
lbltotal.Text = "Showing time from outside" + time;
观察当页面被执行时,如果总的提交返回按钮被点击了,它将更新标签中都更新时间,但是如果部分提交返回按钮被点击,它仅仅更新在 update panel 内的标签。
UpdatePanel Control 的属性
属性 | 描述 |
---|---|
ChildrenAsTriggers | 这个属性表示返回是否来自于子控件,这将引起 update panel 的刷新。 |
ContentTemplate | 它是内容模板并且定义了当它出现时什么出现在 update panel 内。 |
ContentTemplateContainer | 检索动态创建的 template container 对象并被用来以编程方式添加子控件。 |
IsInPartialRendering | 指出 panel 是否被更新作为部分提交返回的一部分。 |
RenderMode | 展示 render 模式。可用的模式是 Block 和 Inline。 |
UpdateMode | 通过确定一些条件来获得或设置 rendering 模式。 |
Triggers | 定义 collection trigger 对象,每一个对应于一个引发 panel 自动更新的事件。 |
UpdatePanel Control 的方法
以下表格展示了 update panel 控件的方法:
方法 | 描述 |
---|---|
CreateContentTemplateContainer | 创建了一个 Control 对象来作为定义 UpdatePanel 控件内容的子控件的容器。 |
CreateControlCollection | 返回所有包含在 UpdatePanel 控件内的控件集合 |
Initialize | 如果部分页面绘制被运行的话,初始化 UpdatePanel 控件触发器集合。 |
Update | 引起 UpdatePanel 控件内容的更新。 |
update panel 的行为依赖于 UpdateMode 属性和 ChildrenAsTriggers 属性的值。
方法 | 描述 | 影响 |
---|---|---|
Always | False | 不合法的参数。 |
Always | True | 如果整个页面更新或者一个它上面的一个子控件返回,UpdatePanel 更新。 |
Conditional | False | 如果整个页面更新或者它外部的一个触发的控件开始一次更新,UpdatePanel 更新。 |
Conditional | True | 如果整个页面更新或者一个它上面的一个子控件返回或者一个它外部的触发控件开始一次更新,UpdatePanel 更新。 |
UpdateProgress 控件
当一个或者更多的 update panel 控件被更新时,UpdateProgress 控件提供了浏览器的一种反馈。例如,当一个用户登录或者当执行一些面向数据库的工作时等待服务器响应。
它提供了如 "Loading page..." 的视觉确认,表示工作在处理中。
UpdateProgress 控件的语法是:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1" >
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
以上的片段展示了一个简单的带有 ProgressTemplate 标签的信息。但是,它可以是一张图片或者其他相关的控件。UpdateProgress 控件显示每一个异步的返回,除非它使用 AssociatedUpdatePanelID 属性,被指定为单独的 update panel。
UpdateProgress 控件的属性
以下的表格展示了 update progress 控件的属性。
属性 | 描述 |
---|---|
AssociatedUpdatePanelID | 获得并用这个控件所联系的控件设置 update panel 的 ID。 |
Attributes | 获得并设置 UpdateProgress 控件的 cascading style sheet(CSS)属性。 |
DisplayAfter | 在处理模板被展示后获得并以毫秒设置时间。默认是 500。 |
DynamicLayout | 指示进程模板是否被动态展示。 |
ProgressTemplate | 指示模板在一个比 DisplayAfter 时间花了更多时间的异步提交返回的过程中展示。 |
UpdateProgress 控件的方法
以下的表格展示了 update progress 控件的方法:
方法 | 描述 |
---|---|
GetScriptDescriptors | 返回一个 UpdateProgress 控件的客户端功能所需要的组件,行为和客户端控件的列表。 |
GetScriptReferences | 返回一个客户端脚本依赖 UpdateProgress 控件的列表。 |
Timer 控件
timer 控件被用来自动初始化提交返回。这可以用两种方式完成:
(1)设置 UpdatePanel 控件的 Triggers 属性。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnpanel2" EventName="Click" />
</Triggers>
(2)直接在 UpdatePanel 内部放置一个 timer 控件来作为一个子控件的触发器。一个单独的 timer 能作为许多 UpdatePanel 的触发器。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="1000">
</asp:Timer>
<asp:Label ID="Label1" runat="server" Height="101px" style="width:304px" >
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
ASP.NET 验证器
验证器
ASP.NET 的有效性控制是验证用户输入的数据从而确保那些无用的、未经授权的、矛盾的数据不能被存储。
ASP.NET 提供了如下几个方面的验证控制:
- 必要字段验证器(RequiredFieldValidator)
- 范围验证器(RangeValidator)
- 比较验证器(CompareValidator)
- 正则表达式验证器(RegularExpressionValidator)
- 自定义验证器(CustomValidator)
- 验证摘要控件(ValidationSummary)
BaseValidator 类
有效性验证的类从 BaseValidator 类中继承得到,因此它们继承了它的属性和方法。因此学习这个作为所有有效性控制的基础的基本类的属性和方法对于后续学习将有很大帮助:
组成部分 | 描述 |
---|---|
ControlToValidate | 获取或设置要验证的输入控件。 |
Display | 说明错误提示如何显示。 |
EnableClientScript | 说明客户端的是否采取了验证。 |
Enabled | 开启或者关闭验证器。 |
ErrorMessage | 说明错误字符串。 |
Text | 如果验证失败将要显示的文本。 |
IsValid | 说明控制值是否有效。 |
SetFocusOnError | 在验证失败时是否将焦点设置到相关的输入控件上。 |
ValidationGroup | 获取或设置此验证控件所属的验证组的名称。 |
Validate | 对关联的输入控件执行验证并更新 IsValid 属性。 |
RequiredFieldValidator 控制
RequiredFieldValidator 控制确保必填字段不为空。它主要和文本框绑定使得用户向文本框输入。
该控制的语法如下:
<asp:RequiredFieldValidator ID="rfvcandidate"
runat="server" ControlToValidate ="ddlcandidate"
ErrorMessage="Please choose a candidate" >
</asp:RequiredFieldValidator>
RangeValidator 控件
RangeValidator 控件负责核实输入的值是否在预设的范围之内。
它有三种特定属性:
属性 | 描述 |
---|---|
类型(Type) | 它定义了数据类型。可用的数据类型包括:Currency, Date, Double, Integer, 和 String |
最小值(MinimumValue) | 它指定了范围中的最小值 |
最大值(MaximumValue) | 它指定了范围中的最大值 |
这个控件的语法如下:
<asp:RangeValidator ID="rvclass" runat="server" ControlToValidate="txtclass"
ErrorMessage="Enter your class (6 - 12)" MaximumValue="12"
MinimumValue="6" Type="Integer">
</asp:RangeValidator>
CompareValidator 控件
CompareValidator 控件根据输入到另一个输入控件中的值、常量数值或正确的数据类型来验证值。
它有以下的特定属性:
属性 | 描述 |
---|---|
Type | 它定义了数据类型。 |
ControlToCompare | 它指定了输入控制中需要比较的值。 |
ValueToCompare | 它指定了输入控制中不变的值。 |
Operator | 它指定了比较的运算符,可用的值包括:相等、不等、大于等于、小于、小于等于、数据类型检查。 |
这种控件的基本语法如下:
<asp:CompareValidator ID="CompareValidator1" runat="server"
ErrorMessage="CompareValidator">
</asp:CompareValidator>
RegularExpressionValidator 控件
RegularExpressionValidator 控件允许通过和正则表达式匹配来确定输入的有效性。正则表达式在 ValidationExpression 的属性里设置。
下表总结了正则表达式通常所用到的语法结构:
转义字符 | 描述 |
---|---|
\b | 和退格键匹配。 |
\t | 和 tab 匹配。 |
\r | 和回车键匹配。 |
\v | 和垂直制表符匹配。 |
\f | 和换页符匹配。 |
\n | 和换行匹配。 |
\ | 转义符。 |
除了简单的字符匹配,一类字符可以被设置成匹配的,这类字符叫做通配符。
通配符 | 描述 |
---|---|
. | 可以匹配除了 \n 之外的任意字符。 |
[abcd] | 可以匹配集合中的任意字符。 |
[^abcd] | 排除集合中的任意字符。 |
[2-7a-mA-M] | 匹配特定范围内的任意字符。 |
\w | 匹配任意字母数字字符组和下划线。 |
\W | 匹配任何非单词字符。 |
\s | 匹配如空格,制表位,换行等字符。 |
\S | 匹配任何非空格的字符。 |
\d | 匹配任何小数字符。 |
\D | 匹配任何非小数字符。 |
量词可以表明字符出现的特定字数。
量词 | 描述 |
---|---|
* | 零或更多匹配。 |
+ | 一个或更多匹配。 |
? | 零或一匹配。 |
{N} | N 匹配。 |
{N,} | N 或更多匹配。 |
{N,M} | 在 N 和 M 之间匹配。 |
该控件的基本语法如下:
<asp:RegularExpressionValidator ID="string" runat="server" ErrorMessage="string"
ValidationExpression="string" ValidationGroup="string">
</asp:RegularExpressionValidator>
CustomValidator 控件
CustomValidator 控件允许编写客户端和服务器端特定的验证例程来验证值。
客户端验证通过 ClientValidationFunction 来适当的完成。客户端验证例程应该用浏览器能够识别的脚本语言来编写,例如 JavaScript 或者 VBScript。
服务器端的验证例程应该由控件的 ServerValidate 事件处理器来生成。服务器端的验证例程应该用任意的 .Net 语言来编写,例如:C# 或 VB.Net。
这种控件的基本语法如下:
<asp:CustomValidator ID="CustomValidator1" runat="server"
ClientValidationFunction=.cvf_func. ErrorMessage="CustomValidator">
</asp:CustomValidator>
ValidationSummary 控件
ValidationSummary 控件并不会进行任何验证但是会在页面显示一个所有的错误的总结。这个总结可以显示出所有失败的验证控件的错误信息属性的值。
下面两个相互包含的属性列表列出来错误信息:
- ShowSummary:用特殊格式显示错误信息。
- ShowMessageBox:用单独的窗口显示错误信息。
这个控件的基本语法如下:
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
DisplayMode = "BulletList" ShowSummary = "true" HeaderText="Errors:" />
验证组
复杂的页面会在不同的层面有不同的信息组。在这种情况下,不同的组就要有不同的验证这种情况可以用验证组来解决。
创建一个验证组,你必须通过设置输入控件和验证控件的 ValidationGroup 属性从而把它们放到相同的逻辑组中。
例子
下面这个例子描述了一个将由全校学生填的表格,这个表格分为四部分是用来竞选校长的。在这里,我们将用验证控件来验证用户所输入的。
这是在设计视图下的形式:
这部分内容的代码如下:
<form id="form1" runat="server">
<table style="width: 66%;">
<tr>
<td class="style1" colspan="3" align="center">
<asp:Label ID="lblmsg"
Text="President Election Form : Choose your president"
runat="server" />
</td>
</tr>
<tr>
<td class="style3">
Candidate:
</td>
<td class="style2">
<asp:DropDownList ID="ddlcandidate" runat="server" style="width:239px">
<asp:ListItem>Please Choose a Candidate</asp:ListItem>
<asp:ListItem>M H Kabir</asp:ListItem>
<asp:ListItem>Steve Taylor</asp:ListItem>
<asp:ListItem>John Abraham</asp:ListItem>
<asp:ListItem>Venus Williams</asp:ListItem>
</asp:DropDownList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvcandidate"
runat="server" ControlToValidate ="ddlcandidate"
ErrorMessage="Please choose a candidate" >
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style3">
House:
</td>
<td class="style2">
<asp:RadioButtonList ID="rblhouse" runat="server" RepeatLayout="Flow">
<asp:ListItem>Red</asp:ListItem>
<asp:ListItem>Blue</asp:ListItem>
<asp:ListItem>Yellow</asp:ListItem>
<asp:ListItem>Green</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvhouse" runat="server"
ControlToValidate="rblhouse" ErrorMessage="Enter your house name" >
</asp:RequiredFieldValidator>
<br />
</td>
</tr>
<tr>
<td class="style3">
Class:
</td>
<td class="style2">
<asp:TextBox ID="txtclass" runat="server"></asp:TextBox>
</td>
<td>
<asp:RangeValidator ID="rvclass"
runat="server" ControlToValidate="txtclass"
ErrorMessage="Enter your class (6 - 12)" MaximumValue="12"
MinimumValue="6" Type="Integer">
</asp:RangeValidator>
</td>
</tr>
<tr>
<td class="style3">
Email:
</td>
<td class="style2">
<asp:TextBox ID="txtemail" runat="server" style="width:250px">
</asp:TextBox>
</td>
<td>
<asp:RegularExpressionValidator ID="remail" runat="server"
ControlToValidate="txtemail" ErrorMessage="Enter your email"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>
</td>
</tr>
<tr>
<td class="style3" align="center" colspan="3">
<asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click"
style="text-align: center" Text="Submit" style="width:140px" />
</td>
</tr>
</table>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
DisplayMode ="BulletList" ShowSummary ="true" HeaderText="Errors:" />
</form>
提交按钮的代码如下:
protected void btnsubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblmsg.Text = "Thank You";
}
else
{
lblmsg.Text = "Fill up all the fields";
}
}
github地址:
https://github.com/ixixii/ASP.NET_02_WebForms
未完待续,下一章节,つづく