ASP.NET 系列_06_编程指南(二)

 

ASP.NET 系列_06_编程指南(二)_第1张图片

 

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, 和日历控件。

使用服务器控件的基本语法是:

此外,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 控件。

在页面上添加树视图控件。从任务中选择编辑结点...使用树视图结点编辑器编辑每个结点,如下所示:

ASP.NET 系列_06_编程指南(二)_第2张图片

当成功创建结点之后,设计视图下会有如下显示:

ASP.NET 系列_06_编程指南(二)_第3张图片

AutoFormat... 任务允许您规定树视图的格式,如下所示:

ASP.NET 系列_06_编程指南(二)_第4张图片

在页面上添加一个标签控件和文本框控件并分别命名为 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 系列_06_编程指南(二)_第5张图片

 

 

ASP.NET 文件上传

 

文件上传

本节介绍了 ASP.NET 中使用的两种向网页上传文件的方法。

ASP.NET 包含两个控件可以使用户向网页服务器上传文件。一旦服务器接受了上传的文件数据,那么应用程序就可以进行保存,进行检查或者忽略它。接下来的控件允许文件上传:

  • HtmlInputFile - HTML 服务器控件
  • FileUpload - ASP.NET 网页控件

两种控件都允许文件上传,但是 FileUpload 控件自动设置编码格式,然而 HtmlInputFile 控件并不会这样。

本指导中,我们将应用 FileUpload 控件。这个控件允许用户预览选择将要上传的文件,它提供了一个预览按钮和一个可以输入文件名的文本框。

一旦用户在文本框中输入文件名或者预览文件,FileUpload 控件的 SaveAs 方法就会将文件保存到硬盘。

FileUpload 的基本语法如下:

FileUpload 类是从 WebControl 类中得出的,并且它继承了它的所有元素,FileUpload 类具有以下这些只读属性:

属性 描述
FileBytes 返回一组将要上传文件的字节码
FileContent 返回将要被上传的的文件的流对象
FileName 返回将以上传的文件名称
HasFile 判断控件是否有文件需要上传
PostedFile 返回一个关于已上传文件的参考

发布的文件以 HttpPostedFile 形式的对象进行封装,这个对象可以通过 FileUpload 类的 PostedFile 属性被存取。

HttpPostedFile 类具有以下常用的属性:

属性 描述
ContentLength 返回已上传的文件的字节大小
ContentT ype 返回已上传的文件的 MIME 类型
FileName 返回文件全名
InputStream 返回将要被上传的的文件的流对象

例子

下面的例子说明了 FileUpload 控件以及它的属性。这个表格有一个 FileUpload 控件以及一个保存按钮和一个真实文件名称、类型、长度的标签控件。

在设计模式下,表格如下图所示:

ASP.NET 系列_06_编程指南(二)_第6张图片

相关文件代码列示如下:


   

File Upload:






保存按钮的代码列示如下:


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("" + FileUpload1.FileName);

         //Showing the file information
         sb.AppendFormat("
Save As: {0}", FileUpload1.PostedFile.FileName); sb.AppendFormat("
File type: {0}", FileUpload1.PostedFile.ContentType); sb.AppendFormat("
File length: {0}", FileUpload1.PostedFile.ContentLength); sb.AppendFormat("
File name: {0}", FileUpload1.PostedFile.FileName); }catch (Exception ex) { sb.Append("
Error
"); sb.AppendFormat("Unable to save file
{0}", ex.Message); } } else { lblmessage.Text = sb.ToString(); } }

注意以下问题:

  • StringBuilder 类是由 System.IO 命名空间产生,所以应该包括它。
  • try 和 catch 区域是用来捕捉错误、显示错误信息的。

 

 

ASP.NET HTML 服务器

 

HTML 服务器

HTML 服务器控件主要是保证服务端运行的增强型标准 HTML 控件。HTML 控件不是由服务器处理,而是被发送到浏览器进行显示,比如页面标题标签,链接标签及输入元素。

通过添加 runat = "server" 属性和一个 id 属性,它们可被特定地转化为一个服务器控件,应用于服务器端处理。

例如,HTML 输入控件:

它可以通过添加 runat 和 id 属性被转换成一个服务器控件:

使用 HTML 服务器控件的优点

尽管 ASP.NET 服务器控件可以完成 HTML 服务器控件执行的每一项工作,HTML 控件在以下情况仍然具有优势:

  • 使用静态表达到布局目的。
  • 转换一个 HTML 页面到 ASP.NET 下运行。

下面这个表格介绍了 HTML 服务器控件:

控件名称 HTML 标签
HtmlHead element
HtmlInputButton
HtmlInputCheckbox
HtmlInputFile
HtmlInputHidden
HtmlInputImage
HtmlInputPassword
HtmlInputRadioButton
HtmlInputReset
HtmlText
HtmlImage element
HtmlLink element
HtmlAnchor element
HtmlButton
HtmlButton
HtmlForm
element
HtmlTable element element
HtmlTableCell and
HtmlTableRow
HtmlTitle element</td> </tr> <tr> <td>HtmlSelect</td> <td><select&t; element</td> </tr> <tr> <td>HtmlGenericControl</td> <td>未列出的所有 HTML 控件</td> </tr> </tbody> </table> <h2>实例</h2> <p>以下实例使用了基本的 HTML 表格进行布局。它使用了用于从用户获得输入诸如姓名,地址,城市,州等的框,还有一个按钮控件,该控件被点击后能够获取该表最后一行中显示的用户数据。</p> <p>页面在设计视图中应如下所示:</p> <p><a href="http://img.e-com-net.com/image/info8/fa25405572de49488114eeeb2508f2f0.jpg" target="_blank"><img alt="ASP.NET 系列_06_编程指南(二)_第7张图片" class="has" src="http://img.e-com-net.com/image/info8/fa25405572de49488114eeeb2508f2f0.jpg" width="395" height="186" style="border:1px solid black;"></a></p> <p>内容页面的代码表明了 HTML 表格元素进行布局的应用。</p> <pre class="has"><code><%@ 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
Name:
Street
City
State

按钮控件的后台代码为:

protected void Button1_Click(object sender, EventArgs e)
{
   string str = "";
   str += txtname.Text + "
"; str += txtstreet.Text + "
"; str += txtcity.Text + "
"; str += txtstate.Text + "
"; displayrow.InnerHtml = str; }

观察以下陈述:

  • 标准 HTML 标签已被使用进行页面布局。
  • HTML 表格的最后一行用于数据显示。它需要服务器端进行加工,因此为其添加 ID 属性和 runat 属性。

 

 

ASP.NET 广告轮转器

 

广告轮转器

广告轮转控制器从一个列表里随机选择在外部 XML 定时文件中指定的横幅图像。这个外部 XML 定时文件被叫做广告文件。

广告轮转控件允许你指定一个广告文件和窗口的类型,链接应该分别遵循 AdvertisementFile 和 Target 的属性。

添加 AdRotator 的基本语法如下:

在了解 AdRotator 控件以及它的属性之前,让我们先来看看广告文件的构成。

广告文件

广告文件是一种 XML 文件,它包括了广告所要被显示的信息。

可扩展标记语言(XML)是一种 W3C 的标准文本文档标记语言。它是一个基于文本的标记语言,它使您可以通过使用有意义的标签来让数据存储在结构化格式中。术语 'extensible' 意味着可以扩展功能,通过给应用程序定义有意义的标签来描述文档。

XML 本身不是一种语言,如 HTML ,而是一组用于创建新的标记语言的规则。它是一个元标记语言。它允许开发人员创建自定义标记集作特殊用途。它构建,存储并传输的信息。

下面是 XML 文件的一个例子:


    Learn XML 
    Samuel Peterson 
    NSS Publications 
    $30.00

像所有的 XML 文件,该广告文件需要被具有良好定义并标记的结构化文本文件来描绘数据。这里也有一些在广告文件中常用的标准 XML 元素:

元素 描述
Advertisements 包围广告文件。
Ad 界定独立的广告。
ImageUrl 将要显示的图像的路径。
NavigateUrl 当用户点击该广告时出现的链接。
AlternateText 如果图像不能被显示,则会显示文本。
Keyword 关键字用来识别一组广告,用于过滤。
Impressions 该数字显示广告出现的频率。
Height 显示图像的高度。
Width 显示图像的宽度。

除了这些标签,带有一般属性的习惯性的标签也可以被包含进去。下面的代码演示了一个广告文件,ads.xml:


   
      rose1.jpg
      http://www.1800flowers.com
      
         Order flowers, roses, gifts and more
      
      20
      flowers
   

   
      rose2.jpg
      http://www.babybouquets.com.au
      Order roses and flowers
      20
      gifts
   

   
      rose3.jpg
      http://www.flowers2moscow.com
      Send flowers to Russia
      20
      russia
   

   
      rose4.jpg
      http://www.edibleblooms.com
      Edible Blooms
      20
      gifts
   

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 控件。

该 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" %>





   
      
         Untitled Page
      
   

   
      

当这个页面在浏览器中运行时,View Source 选项显示了 HTML 网页并通过 ASP.Net 运行时间发送到浏览器:





   
      
         Untitled Page
      
   

   
      

如果恰当地浏览编码,您就会发现前两个 \

标签包含了存储的视图状态和有效数据的隐藏域。

 

 

 

ASP.NET 日历

 

日历

日历控件是一个功能丰富的网络控件,它提供了以下功能:

  • 一次显示一个月
  • 选择一天,一个星期或一个月
  • 选择某范围之内的一天
  • 在月份和月份之间移动
  • 格式化的控制天数的显示

日历控件的基本的语法为:


日历控件的属性和事件

日历控件有很多的属性和事件,使用它们你可以自定义操作并且控制显示。下表提供了日历控件的一些重要的属性:

属性 描述
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 获取或设置一个值,该值显示是否呈现表格标题 HTML 元素给日期标头而不是表格数据 HTML 元素。
VisibleDate 获取或设置指定月的日期并显示。
WeekendDayStyle 获取或设置周末日期的样式属性。

日期控件有以下三个最重要的事件来允许开发者编写日期控件。它们是:

事件 描述
SelectionChanged 当一天,一周或一个月被选中时,它会被触发。
DayRender 日历控件的每一个数据单元呈现时,它会被触发。
VisibleMonthChanged 用户更改月份时,它会被触发。

使用日历控件

使用一个没有任何代码的初始的日历控件给网站提供一个有效的日历,以显示一年中的月份和日期。它也含有下个月和上个月的导航。

ASP.NET 系列_06_编程指南(二)_第8张图片

日历控件允许用户选择一天,一周,或一整个月。这是通过使用 SelectionMode 属性来实现的。这个属性有以下值:

属性 描述
Day 选择一天。
DayWeek 选择一天或一整个星期。
DayWeekMonth 选择一天一星期或一整个月。
None 什么也不能被选择。

选择日期的语法:


当选择模式选择为 DayWeekMonth 时,会出现一个用符号 > 标识的额外的列来选择星期,并且 >> 符号出现在天名的左边来选择月份。

ASP.NET 系列_06_编程指南(二)_第9张图片

例子

下面的例子演示了选择一个日期并且显示在一个标签内:

内容文件代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="calendardemo._Default" %>





   
      
         Untitled Page
      
   

   
      

Your Birthday:

Todays date is:

Your Birday is:

事件处理程序的事件 SelectionChanged:

protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
   lblday.Text = Calendar1.TodaysDate.ToShortDateString();
   lblbday.Text = Calendar1.SelectedDate.ToShortDateString();
}

运行该文件时,它将生成以下输出:

ASP.NET 系列_06_编程指南(二)_第10张图片

 

 

ASP.NET 基础控件

 

基础控件

这在一章节,我们将讨论在 ASP.NET 中有效的基础控件。

按钮控件

ASP.NET 提供了三种不同类型的按钮控件:

  • 按钮:在矩形区域内显示文本。
  • 链接按钮:像超链接一样显示文本。
  • 图像按钮:显示图像。

当用户单击一个按钮时,两个事件被触发:单击和指令。

按钮控件的基础语法:

按钮控件的通用属性:

属性 描述
Text 文本显示在按钮上。仅对于按钮和链环按钮的控件。
ImageUrl 仅对于图像按钮控件。这个图像是为了显示按钮。
AlternateText 仅对于图像按钮控件。如果浏览器无法显示图像,替换文本会显示。
CausesValidation 当用户单击按钮时确定是否执行页面验证。默认为真。
CommandName 当用户单击按钮时传递给命令事件的字符串值。
CommandArgument 当用户单击按钮时传递给命令事件的字符串值。
PostBackUrl 当用户单击按钮时出现需要的页面地址。

文本框和标签

文本框控件是专门接受用户输入而设置。一个文本框控件可以依据文本模式的属性接受一条或多条文本的输入。

标签控件为显示文本提供了一个简单的方法,这种方法能够从执行一个页面到下一个页面。如果想要显示一个不变的文本,那么您可以使用文字文本。

正文控制的基本语法:

文本框和标签的通用属性:

属性 描述
TextMode 指定文本框类型。单行模式创建标准文本,多行模式创建能够接受多个文本,口令会引发输入待标记的字符。默认为标准文本。
Text 文本框的文本内容。
MaxLength 输入文本框中文本字符的最大值。
Wrap 它确定多行文本框中文本是否自动换行的;默认值是真。
ReadOnly 确定用户是否可以更改框中的文本;默认为假,即用户可以更改文本。
Columns 在字符的文本框的宽度。实际宽度是基于用于文本输入的字体来确定。
Rows 多行文本框的高度。默认值是 0,表示一个单行文本框。

大多使用属性的标签控件是 'Text',它代表在标签上显示的文本。

复选框和单选按钮

一个复选框将显示一个选项,用户可以选中或取消。单选按钮呈现一组用户可以只选择一个选项的选项组。

如果要创建一组单选按钮,您可以为每个单选按钮组中的组名属性指定相同的名称。如果一个以上的组需要呈现一个单一的形式,则指定每个组不同的组的名称。

如果您想按照最初显示的形式来选中复选框或单选按钮,可将其选中属性为 true。如果多个单选按钮在一组的属性设置为 true,则只有最后一个被认为是 true。

复选框的基本语法:

 

单选按钮的基本语法:

 

复选框和单选按钮的通用属性:

属性 描述
Text 在复选框或单选按钮旁边显示的文本。
Checked 制定是否被选中,默认为未选中。
GroupName 控件归属组的名称。

列表控件

ASP.NET 提供以下控件:

  • 下拉式列表,
  • 列表框,
  • 单选按钮列表,
  • 复选框列表,
  • 项目符号列表。

这些控件让用户可以从一个或多个项目列表中选择。列表框和下拉列表包含一个或多个列表项。这些列表可以通过代码或者由 ListItemCollection 编辑器被加载。

列表框控件的基本语法:


下拉列表控件的基本语法:


列表框和下拉列表的通用属性:

属性 描述
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 对象的集合,它们可以通过控件的项目属性被参考。

单选按钮列表的基本语法:


复选框列表的基本语法:


复选框和单选按钮列表的通用属性:

属性 描述
RepeatLayout 该属性指定在提出格式化列表过程中是否使用标签或普通 HTML 流。默认为表格。
RepeatDirection 它指定了方向,在该方向中控件可以被重复。可用的值是水平和垂直。默认是垂直的。
RepeatColumns 当重复控件时,它指定了列的数字;默认为 0。

项目符号列表和编号列表

项目符号列表控件创建项目符号列表或编号列表。这些控件包含 ListItem 对象的集合,它们可以通过控件的项目属性被参考。

项目符号列表的基本语法:


项目符号列表的通用属性:

属性 描述
BulletStyle 该属性指定样式和项目编号的外观或者数字。
RepeatDirection 它指定了方向,在该方向中控件可以被重复。可用的值是水平和垂直。默认是垂直的。
RepeatColumns 当重复控件时,它指定了列的数字;默认为 0。

超链接控件

超链接控件就像 HTML  元素。

超链接控件的基本语法:


   HyperLink

它具有以下属性:

属性 描述
ImageUrl 由控件显示的图像的路径。
NavigateUrl 目标链接地址。
Text 作为链接显示的文本。
Target 加载链接页面的窗口或框架。

图像控件

若图片无法显示,图像控件则在网页,或者一些替代文本上显示图片。

图像控件的基本语法:

它具有以下重要属性:

属性 描述
AlternateText 图片不存在时显示替代文本。
ImageAlign 对齐选项控件。
ImageUrl 由控件显示的图像的路径。

 

ASP.NET 多视图

 

多视图

MultiView 和 View 控件允许你将一个页面的内容分成不同的组,一次只显示一组。每个视图控件管理一个组的内容,并且所有视图控件包括在 MultiView 控件中。

多视图控件一次只负责显示一个视图。视图显示称为活动视图。

MultiView 控件的语法是:


View 控制的语法是:


然而,该控件不能自行存在。如果您尝试单独使用它会出现错误。它总是和一个多视点控制器一起使用:


    

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" %>





   
      
         Untitled Page
      
   

   
      

MultiView and View Controls


This is view 1


This is view 2

This is view 3



注意以下事项:

MultiView.ActiveViewIndex 确定了哪些视图将要显示。这是页面上呈现的唯一视图。没有视图显示时 ActiveViewIndex 的默认值是 -1。 由于范例中 ActiveViewIndex 被定义为 2,所以被执行时它显示的是第三个视图。

ASP.NET 系列_06_编程指南(二)_第11张图片

 

 

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 控件可以作为一个页面上的其他控件的容器。它控制其包含的控件的外观和可视度。它还允许生成控件编程。

面板控件的基本语法如下:


面板控件从 WebControl 类派生。因此,它同样地继承了所有的属性、方法和事件。它不具有任何自己的方法或事件。然而,它有自己的以下属性:

属性 描述
BackImageUrl 面板背景图像的地址。
DefaultButton 获取或设置包含在 Panel 控件的默认按钮的标识符。
Direction 面板中的文本方向。
GroupingText 允许文本作为一个字段分组。
HorizontalAlign 水平对齐面板中的内容。
ScrollBars 指定面板内滚动条的可见性和位置。
Wrap 允许文本换行。

使用面板控件

让我们从一个具体的高度和宽度、边框样式简单的滚动面板开始。滚动条属性设置为两个滚动条,因此两个滚动条同时被呈现。

源文件具有如下的面板标签代码:



   This is a scrollable panel.
   

面板呈现如下:

ASP.NET 系列_06_编程指南(二)_第12张图片

例子

下面的例子演示了动态内容生成。用户提供要在面板上产生的标签控件和文本框的数目。控件以编程方式生成。

用属性窗口更改面板属性。当您在设计视图中选择一个控件时,该属性窗口中将显示特定控件的属性,并允许您更改,而无需键入。

ASP.NET 系列_06_编程指南(二)_第13张图片

示例的源文件如下:

This panel shows dynamic control generation:

No of Labels: 0 1 2 3 4
No of Text Boxes : 0 2 3

在 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("
")); } //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("
")); } } }

当被执行时,面板呈现为:

ASP.NET 系列_06_编程指南(二)_第14张图片

 

 

 

 

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" %>





   
      
         Untitled Page
      
   

   
      

View State demo

Page Counter:

该实例的后台代码文件如下所示:

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 系列_06_编程指南(二)_第15张图片

控制状态

控制状态不能被直接修改,存取或禁用。

会话状态

当用户连接到 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"  %>





   
      
         Untitled Page
      
   

   
      
     

在设计视图中应有如下显示:

ASP.NET 系列_06_编程指南(二)_第16张图片

后台代码如下:

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 系列_06_编程指南(二)_第17张图片

应用程序状态

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' 的控制组件。

ASP.NET 系列_06_编程指南(二)_第18张图片

ScriptManager 控件

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 外。

设计视图如下所示:

ASP.NET 系列_06_编程指南(二)_第19张图片

资源文件如下所示:



Outside the Update Panel

button 控件对时间处理程序都拥有相同的代码:

string time = DateTime.Now.ToLongTimeString();
lblpartial.Text = "Showing time from panel" + time;
lbltotal.Text = "Showing time from outside" + time;

观察当页面被执行时,如果总的提交返回按钮被点击了,它将更新标签中都更新时间,但是如果部分提交返回按钮被点击,它仅仅更新在 update panel 内的标签。

ASP.NET 系列_06_编程指南(二)_第20张图片

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 控件的语法是:



   
      Loading...
   

以上的片段展示了一个简单的带有 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 属性。

 
   

(2)直接在 UpdatePanel 内部放置一个 timer 控件来作为一个子控件的触发器。一个单独的 timer 能作为许多 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 控制确保必填字段不为空。它主要和文本框绑定使得用户向文本框输入。

该控制的语法如下:



RangeValidator 控件

RangeValidator 控件负责核实输入的值是否在预设的范围之内。

它有三种特定属性:

属性 描述
类型(Type) 它定义了数据类型。可用的数据类型包括:Currency, Date, 
Double, Integer, 和 String
最小值(MinimumValue) 它指定了范围中的最小值
最大值(MaximumValue) 它指定了范围中的最大值

这个控件的语法如下:



CompareValidator 控件

CompareValidator 控件根据输入到另一个输入控件中的值、常量数值或正确的数据类型来验证值。

它有以下的特定属性:

属性 描述
Type 它定义了数据类型。
ControlToCompare 它指定了输入控制中需要比较的值。
ValueToCompare 它指定了输入控制中不变的值。
Operator 它指定了比较的运算符,可用的值包括:相等、不等、大于等于、小于、小于等于、数据类型检查。

这种控件的基本语法如下:



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 之间匹配。

该控件的基本语法如下:



CustomValidator 控件

CustomValidator 控件允许编写客户端和服务器端特定的验证例程来验证值。

客户端验证通过 ClientValidationFunction 来适当的完成。客户端验证例程应该用浏览器能够识别的脚本语言来编写,例如 JavaScript 或者 VBScript。

服务器端的验证例程应该由控件的 ServerValidate 事件处理器来生成。服务器端的验证例程应该用任意的 .Net 语言来编写,例如:C# 或 VB.Net。

这种控件的基本语法如下:



ValidationSummary 控件

ValidationSummary 控件并不会进行任何验证但是会在页面显示一个所有的错误的总结。这个总结可以显示出所有失败的验证控件的错误信息属性的值。

下面两个相互包含的属性列表列出来错误信息:

  • ShowSummary:用特殊格式显示错误信息。
  • ShowMessageBox:用单独的窗口显示错误信息。

这个控件的基本语法如下:

验证组

复杂的页面会在不同的层面有不同的信息组。在这种情况下,不同的组就要有不同的验证这种情况可以用验证组来解决。

创建一个验证组,你必须通过设置输入控件和验证控件的 ValidationGroup 属性从而把它们放到相同的逻辑组中。

例子

下面这个例子描述了一个将由全校学生填的表格,这个表格分为四部分是用来竞选校长的。在这里,我们将用验证控件来验证用户所输入的。

这是在设计视图下的形式:

ASP.NET 系列_06_编程指南(二)_第21张图片

这部分内容的代码如下:

Candidate: Please Choose a Candidate M H Kabir Steve Taylor John Abraham Venus Williams
House: Red Blue Yellow Green
Class:
Email:

提交按钮的代码如下:

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

 

未完待续,下一章节,つづく

你可能感兴趣的:(ASP.NET,ASP.NET,编程指南)