首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

ASP.NET服务器控件

ASP.NET Server Controls

在ASP.NET中,最为重要的是ASP.NET服务器控件。服务器控件包含方法以及与之关联的事件处理程序,并且这些代码都在服务器端执行。(部分服务器控件也提供客户端脚本,尽管如此,这些控件事件仍然会在服务器端处理)

如果控件包括可视化组成部分(例如,标签、按钮和表格),那么ASP.NET将在检测目标浏览器接收能力的情况下,为浏览器呈现传统的HTML。如果ASP.NET服务器控件需要利用客户端脚本,以实现某些功能,如第8章所描述的验证控件那样,那么将会生成适应于浏览器类型的脚本,并发送给浏览器。然而,服务器端验证过程仍然执行。

提示:这是一个须重复的关键点:发送给客户端的是最普通的HTML代码,所以,ASP.NET应用程序可以运行在任何厂商的任何浏览器上。所有处理过程都在服务器端完成,同时,ASP.NET服务器控件在浏览器中,最终呈现为标准的HTML代码。另外,所发送的脚本并非是必须经过优化的。

ASP.NET服务器控件提供统一的编程模型。例如,在HTML中,input标签(<input>)可用于按钮、单行文本域、复选框、隐藏域和密码。而多行文本域,则必须使用<textarea>标签。使用ASP.NET服务器控件时,每种不同的功能类型都将对应一种特定控件。例如,使用TextBox控件输入文本,并通过属性指定行数。实际上,通常情况下,对于ASP.NET服务器控件而言,所有声明标记的属性都与控件类的属性相对应。

ASP.NET服务器控件包含了HTML控件可以提供的所有功能,甚至更多。其中包括基本控件,例如,按钮、文本标签、复选框和表格,高级数据控件(例如,数据源、列表、DataGrid和GridView)、验证控件、安全和登录控件,以及一些富(Rich)控件(例如,Calendar、AdRotator、Menu和DynamicImage控件)。

下面列举了位于内容文件窗体中,实现ASP.NET服务器控件的语法:

<asp:controlType

      id="ControlID"

      runat="server"

      thisProperty="this value"

      thatProperty="that value"/>

提示:由于控件以asp开头,所以,这些控件有时又被认为是ASP控件。

控件标签总是以asp:开头,这就是标记前缀。controlType是控件的类型或类,例如,Button、CheckBoxList或GridView。您可利用id属性,以编程方式引用控件实例。runat属性告知服务器,该控件在服务器端运行。

提示:您可能认为runat="server"是默认属性,而无须在每个控件中都声明它。因为,在多数情况下,服务器控件都在服务器端处理。然而,事实并非如此:您必须在每个控件的每次声明中都包括该属性。如果省略了它,并不会发生错误,但是控件将被忽略而不被呈现。

如果您省略ID属性,控件也将完全呈现出来,但是,该控件无法在代码中引用和操作。

您可以在尖括号中声明其他属性。例如,为TextBox声明Text和Width属性,如下所示:

<asp:TextBox ID="txtBookName"

                runat="server"

                Width="250px"

                Text="Enter a book name."/>

虽然ASP.NET可以允许属性值周围不设置引号,但是ASP.NET服务器控件必须使用良构的XHTML语法。(对良构的XHTML的描述请见补充栏)需要明确的是,正如上文所示,尖括号必须明确关闭自身或者具有关闭元素。所以,上面的TextBox也可以书写为:

<asp:TextBox ID="txtBookName"

                runat="server"

                Width="250px"

                Text="Enter a book name."></asp:TextBox>

另外,许多ASP.NET服务器控件可以在打开和关闭标签之间使用内部HTML。例如,在TextBox控件中,可将Text属性指定为内部HTML,而不是将其设置在打开标签的属性中。所以,上面的控件可以等价地写为:

<asp:TextBox ID="txtBookName"

             runat="server"

             Width="250px">Enter a book name.</asp:TextBox>

良构的XHTML

XHTML是一个万维网协会(W3C)的标准,它当前的版本为1.1版。该标准将HTML定义成良构的XML文档。许多浏览器处理HTML都不严格,格式错误的HTML也能很好地工作,然而,现在正朝着更加严格的语法方向发展,以便增加Web的健壮性。对于开发工具而言,良构的代码可带来很大益处。同时,当手工编写代码时,这也是非常有价值的,因为,这可以减少代码混乱和含糊不清。

良构的HTML应遵循以下规则:

关闭所有标签

某些HTML标签,例如,<p>、<tr>和<td>,按惯例是可以不关闭的。然而,在良构的HTML中,必须包含关闭标签,如</td>。某些标签,例如,<br>、<hr>、<input>和<img>,则可将左斜杠放置在标签内来关闭自身。这样就成为良构的代码,示例如下:

<input type="submit"

id="btnBookName"

value="Book Name"

onServerClick="btnBookName_Click"

runat="server" />

禁止标签嵌套

某些浏览器可允许标签嵌套,但是,良构的HTML禁止标签嵌套。例如,下面的HTML就是嵌套的标签:

<b>This is <i>the year</b>for the Red Sox.</i>

以上代码应该表示为:

<b>This is</b> <i><b>the year</b>for the Red Sox.</i>

区分大小写

同HTML和ASP页面类似,ASP.NET一般不区分大小写。一个重要的例外是:C#必须区分大小写。换言之,著名的脚本组件,也就是作为可执行脚本有意输出到浏览器上的代码,都是些XML文件,并遵循XML协定。依照这些协定,元素类型和属性是区分大小写的。如果使用XML编辑工具来编写脚本组件,或者创建XML文件(例如第5章中会介绍使用AdRotator控件显示广告),那么区分大小写通常是最重要的。然而,好习惯是遵循XML规范。除由多个词组成的名称(例如,onServerClick)使用camel命名法,以小写开头之外,其他元素类型和属性通常都使用小写。HTML标签要成为良构的,则需要相匹配的开始和结束标签。本书中所有HTML标签通常会使用小写。-待续-

引号

在良构的HTML中,所有属性值都要置于引号中。

唯一的根元素

页面顶层元素必须是<html>。记住末尾还要用</html>来关闭它。

保留字符

XML中有五个内建的字符实体:

&lt;     <

&gt;     >

&amp;    &

&quot;   "

&apos;   '

如果要在脚本中使用这些字符,那么就必须使用以上字符实体,或者在一个CDATA节中放置整个脚本块。(CDATA是一个XML类型)

HTML控件分两种类型:输入控件和容器控件。HTML输入控件不需要关闭标签(尽管需要良构,但是它们可在末尾加上/作为关闭)。同时,可以通过编程方式访问和控制Name、Value和Type属性。

另一方面,HTML容器控件必须在标记末尾加上/,或者关闭标签。它们不必有Name、Value或Type属性。相反,位于控件打开和关闭标签之间的内容,可以使用InnerHtml或InnerText属性编程访问。这两个属性的不同之处在于:InnerText属性提供自动的HTML特殊字符的编码和解码,例如,<或>。如果使用InnerHtml属性,那么这些字符在最终的输出中,将被解释成HTML代码的一部分,并不作显示。

您可以使用服务器控件类的属性,来设置ASP.NET服务器控件的属性标记,并通过编程方式访问它们。一旦控件被声明,或者在代码中被实例化,那么就可以通过编程方式,获取或设置它的属性。使用下面的代码示例,可以设置或修改Text属性:

txtBookName.Text = "Programming ASP.NET";

多数ASP.NET服务器控件都包含事件。通用的事件处理已经在本章前面做出了解释,每个控件的事件将在讨论具体控件的时候进行讨论。

下面的示例说明:当使用控件的时候,VS2005提供的许多特性,可以将输入代码和错误减到最少,其中包括:

●   在页面的设计视图或者源视图中拖放控件

●   在页面的源视图中,依靠智能感知显示并自动完成属性声明

●   在页面的设计视图或者源视图中使用“Properties”窗口输入属性

打开VS2005,单击“New Web Site”。选中“ASP.NET Web Site”,将语言设置为C#。将新网站命名为ASPNETServerControls。

此时,将创建一个新的Web应用程序,并包含一个名为Default.aspx的页面文件。IDE将在工作区显示Default.aspx的源视图,“工具箱”在屏幕左侧,“解决方案资源管理器”和“属性”窗口在右侧。默认情况下,页面插入示例3-1(重新设置文档格式可提高可读性)。

示例 3-1:默认的模板代码

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

   

    </div>

    </form>

</body>

</html>

使用一些更有意义的文本来替换默认的标题文本,例如,ASP.NET Server Controls。在<div>元素中输入一个标题元素:

<h1>ASP.NET Server Controls</h1>

提示:尽管工具箱中包括多个常用的HTML控件可供拖放,但是却没有标题控件。然而,一旦输入开始的尖括号,智能感知功能就会为HTML和Web服务器控件尽可能列举完整的下拉列表。

您只须输入控件名称的前几个字符,或者使用鼠标下拉并选择控件,就可以获得控件标签。按下Tab键将会插入当前选中的控件。输入关闭的尖括号,将会自动插入关闭标签,并且光标会处于开始和结束标签之间,等待输入。

在设计视图中,下拉菜单的样式选项允许您为被选中文本应用HTML样式。

紧跟着第一个标题,输入第二个标题控件,如下所示:

<h2>The date and time is <% =DateTime.Now.ToString() %>.</h2>

此处,智能感知功能继续发挥着辅助作用。它自动提供h2的关闭元素,一旦您输入字符<%,则表明开始输入服务器端代码,那么它就会自动提供关闭字符%>。在您输入DateTime表达式的每一个衔接处,它都会提供包含可用成员的下拉列表。

警告:记住C#是区分大小写的。如果没有使用正确的大小写,那么代码不会工作,智能感知也什么都不会显示。

在前面的代码段中,通过将代码放置在<% %>字符之间,完成了在内容文件中(没有使用<script>块)放置服务器端代码。这样做是因为浏览器将忽略<script>块间的任何字符,并且不在页面上输出。然而,ASP.NET运行时会把它当作内容来处理。当运行发现有效的框架代码时,就会处理它。在这种情况下,代码返回包含了当前日期和时间的文本字符串,它将直接合并到输出中。

在工作区的底部单击“Design”按钮,将页面切换到“Design”视图。光标会停在所输入的h2标题的后面。标题显示为:

The date and time is .

这表明提供日期和时间的脚本还不能运行,除非页面开始运行。

注释代码

注释ASP.NET代码比较困难。作为一名ASP.NET开发人员,您需要使用HTML、C#、VS2005、JavaScript、VBScript和TransactSQL中工作。每种语言都有它独特的注释语法,并且语言和语言之间又会互相交迭。

此处对几种不同的注释方式进行了总结:

HTML

<!--在这里插入注释文本 -->

JavaScipt

//注释文本跟在后面//

/* 多行

注释 */

C#

// 注释文本跟在后面//

/* 多行

注释 */

VS2005 和 VBScript

' 注释文本跟在一个单引号后面

REM  注释也可以跟在REM关键字后面

Transact SQL

-- 注释文本跟在两个破折号后面

/* 多行

注释 */

XML注释

VS2005可以自动地在代码隐藏文件中将XML注释转换为良构的文档

/// 在C#中,XML注释跟在三个斜杠后面

''' 在VS2005中,注释跟在三个单引号后面

页面(.aspx)文件或用户控件(.ascx)文件

这些字符实际上表明服务器端代码,但是它们是注释,之后也不会再呈现,除非是有效的代码。

<% 在这里插入注释。%>

ASP.NET控件:在ASP.NET控件中没有注释。一些开发人员希望属性能用XX注释,因为任何未被识别的属性都将被忽略。

 

确认光标停在标题行末尾,单击几次回车键以空出一块空白。从“Toolbox”(在“Standard”类别下)拖动TextBox控件到窗体中。此时,TextBox控件将出现在工作区中。

在右侧的“Properties”窗口中,将ID属性的默认值TextBox1修改为txtBookName。同时,将Text属性中的空白修改为Enter a book name.,并将Width属性值修改为250。Width属性显示为250px,单位是像素。

警告:为在代码中引用的控件设置一个有意义的名称,这永远是一个好习惯。

在做进一步处理之前,单击工作区底部的“Source”按钮,以查看由VS2005生成的代码。在div标签之间,您将看到类似如下的代码(已经为页面设置了适当的格式):

<h1>ASP.NET Server Controls</h1>

<h2>The date and time is <% =DateTime.Now.ToString(  ) %>.</h2>

<p>

   &nbsp;</p>

<p>

   <asp:TextBox ID="txtBookName" runat="server" Width="250px">

         Enter a book name.</asp:TextBox>

   &nbsp;</p>

当按下回车键的时候,VS2005插入了段落元素,并附加了未分割的空格。更值得关注的是,插入了一个ASP.NET服务器控件TextBox,该控件设置了Width属性和包含在内部HTML中的Text属性。

您可以在源视图中,直接编辑生成的HTML和ASP.NET服务器控件声明,也可以在设计窗口中设计,或者在“属性”窗口中修改属性。无论如何,页面视图将立刻反映那些修改。

继续下去,在设计视图或者源视图中,从“ToolBox”(还是在“Standard”类别下)拖动一个Button控件到工作区,将其置于TextBox之后。然后,将它的ID属性值修改为btnBookName,Text属性值修改为Book Name。

如果您正处于设计视图中,那么可以在按钮之后,按下回车键以插入一个新行。如果您正处于源视图中,那么在按钮控件之后输入<p>这个HTML元素。然后,在任一视图中,将一个Label控件拖动到页面上。将它的ID属性值修改为lblBookName,将Text属性值设置为空。

此处的目标是让用户在文本框中输入书名,然后,单击按钮,那么用户输入的书名将作为Label控件的Text属性显示出来。

为了达到这个目标,需要如本章前面所描述的那样,为按钮的单击事件指定一个事件处理程序。您可以切换到页面的设计视图,并双击按钮控件。双击控件将告知VS2005,您需要实现该控件的默认事件。对于按钮控件而言,默认事件是Click。

打开代码隐藏文件Default.aspx.cs,在适当的位置将发现一个Click事件处理程序的代码段,此时,光标位于该方法中,等待接受输入。输入以下突出显示的代码行:

protected void btnBookName_Click(object sender, EventArgs e)

{

   lblBookName.Text = txtBookName.Text;

}

单击工作区上方的选项卡,切换到内容文件Default.aspx。然后,单击工作区底部的“Source”按钮,转到源视图。此时,按钮控件上添加了OnClick属性,该属性值已经设置成您所添加文本行的事件处理程序的方法名。

按下F5键或者选择“Debug”>“Start”菜单选项,可运行网页。如果您是第一次运行页面,那么将提示您创建一个配置文件,以便启动调试功能。单击对话框上的“Yes”按钮。

页面将出现在浏览器中。在您输入的第二个标题中,显示了当前日期和时间。修改文本框中的文本,并单击按钮。您所输入的文本将显示在按钮下方的标签中。该页面如图3-3所示:

图3-3:ASP.NET服务器控件

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论