主题:  ASP.NET学习手记

浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#12005/11/3 14:05:37
蓝鲸的教程太短,没学够!打算系统学一下ASP.NET,把原手记贴上来,不知是否违反规定。如果蓝鲸同意的话,我就一直贴、帖、帖,贴到大家烦了为止。
如果您不烦,就看看,从零开始学。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#22005/11/3 14:10:25
从今天开始系统学习ASP.NET,以杨浩翻译的Chris Ullman、John Kauffman(美)等著的ASP.NET 1.1 入门经典——Visual C#.NET 2003编程篇为参考。

第一章 ASP.NET 入门

ASP.NET是一项功能强大、非常灵活的新技术,它用于编写动态Web页面。ASP.NET是微软公司的ASP和.NET Framework这两项核心技术的结合。需要说明的是,用户不需要对ASP有任何了解就可以学习ASP.NET。学习ASP.NET只需要有一些创建Web页面的HTML知识就可以了。实际上,熟悉ASP在某些方面可能还是一种缺点,因为可能需要忘记以前的一些规则。晕……。
ASP.NET允许用基于.NET Framework的任何编程语言(例如VB.NET、JScript.NET或C#等)创建Web应用程序。

1.1 什么是静态Web页面
静态Web页面是指页面的内容和外观总是保持不变——它并不考虑谁在访问页面、何时访问页面、如何进入页面及其他因素。

1.2 静态Web页面的工作原理
①Web作者编写由纯HTML代码组成的Web页面,并将其以.htm文件保存到Web服务器上。
②客户在浏览器中输入页面请求(URL),该请求从浏览器传送到Web服务器。
③Web服务器确定.htm页面的位置,并将它转换成HTML流。
④Web服务器将HTML流通过网络传回到浏览器。
⑤浏览器处理HTML流并显示该页面。

1.2.1 静态Web页面的局限性
HTML页面不具备定制Web页面的功能,每一个Web页面对每个用户都是一样的。HTML也没有安全性,任何人都可以浏览HTML代码;没有办法阻止其他人复制自己的HTML代码,并在他们的页面中使用这些代码。静态页面的优点是执行速度非常快。

1.2.2 什么是Web服务器
Web服务器是一个软件,用于管理Web页面,并使这些页面通过本地网络或Internet供客户浏览器使用。有许多可能的Web服务器,最常用的是Apache、IIS和Iplanet的Enterprise服务器。下面只介绍IIS。
IIS:因特网信息服务系统,与Windows 2000、Windows XP Professional和Windows 2003 Server捆绑在一起。它们捆绑的分别是IIS 5.0、5.1和6.0,不同版本之间的差别不大,这里将它们按同样的产品对待。

1.3 动态Web页面的工作原理①Web作者编写一套用于创建HTML的指令,并将这些指令保存到文件中。
②客户在浏览器中输入页面请求(URL),该请求从浏览器传送到Web服务器。
③Web服务器确定指令文件的位置。
④Web服务器根据指令创建HTML流。
⑤Web服务器将新创建的HTML流通过网络传回到浏览器。
⑥浏览器处理HTML流并显示该页面。

编辑历史:[此帖最近一次被 diffmaker 编辑过(编辑时间:2005-11-03 14:18:24)]


浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#32005/11/3 14:14:34
1.4 什么是ASP.NET
ASP.NET是一项功能强大的、非常灵活的服务器端技术,用于创建动态Web页面。

1.4.1 ASP.NET与ASP的区别
ASP只能使用脚本语言,主要是javascript或VBScript。脚本语言就象是编程语言的简明版本或低等级脚本,因为它们的功能不那么强大,也不支持编程语言的全部功能。另外,给Web页面添加ASP代码的方法与在客户端脚本中添加代码的方法相同,而这样做会导致诸如代码杂乱、功能有限等问题。
ASP.NET则不会出现此类问题,它允许使用有很大选择余地的、功能完善的编程语言,也允许充分利用有巨大潜力的.NET Framework。ASP.NET可以帮助用户利用由.NET Framework支持的任何一种编程语言创建更快、更可靠的动态Web页面。.NET Framework支持的语言有VB.NET、JScript.NET(一种javascript的新版本)以及C#。此外,第三方开发人员有望创建出运行于ASP.NET的Perl、Python和其他许多软件的版本。
ASP.NET带有大量的控件,这些控件无需进行任何ASP.NET编码就可以用于页面。
ASP.NET已经与HTML分离开。

1.4.2 使用C#和ASP.NET
ASP.NET被描述为一门技术而不是一种语言,这是非常重要的!ASP.NET页面可以用许多语言生成,这里我们选择C#,因为它对初学者来说是最为简单的,而且它可以完成其他.NET语言能够完成的大多数功能。此外,它随ASP.NET免费提供,因此,当安装ASP.NET时,也就得到了C#。

1.4.3 ASP、ASP.NET以及C#之间的关系
ASP:用于创建动态Web页面的服务器端技术,它只允许使用脚本语言。
ASP.NET:用于创建动态Web页面的服务器端技术,它只允许使用由.NET支持的任何一种功能完善的编程语言。
C#:一种编程语言,用于在ASP.NET中编写代码。

1.5 安装
①安装IIS。
②安装MDAC(微软数据访问组件)2.7版或更新的版本。
它是一套组件,允许利用ASP.NET与数据库通信。
③安装ASP.NET和.NET Framework。
ASP.NET是.NET Framework的一个集成组件。.NET 1.1 Framework附带的是ASP.NET 1.1。
④安装Microsoft Visual Studio .NET 2003。
该书特别讨厌的是以Web Matrix做为Web服务器,真鸟!

编辑历史:[此帖最近一次被 diffmaker 编辑过(编辑时间:2005-11-03 14:21:20)]


浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#42005/11/3 14:26:06
第二章 ASP.NET页面的剖析

2.1 什么是.NET
.NET是一个内涵很广的术语,它包含了微软公司对未来的核心战略、规划与洞察力。此战略的核心就是.NET Framework,该构架提供了全面支持.NET的核心技术。.NET Framework本身由若干组件组成:
MSIL——MS中间语言,.NET的通用语言。程序员可以使用任何.NET语言编写代码,包括VB、C#、JScript和其他大约20种语言。这些代码都会编译为MSIL。
CLR——公共语言运行时,负责在计算机上执行MSIL、与Windows和IIS交互时所涉及的全部实质性任务。
.NET Framework类库——包含大量重要功能的代码库。用户可以非常方便地将这些库调用到应用程序中,使复杂任务的程序代码更为简洁。
.NET语言——是符合一些特殊要求(由公共语言规范定义)的编程语言,能够编译成MSIL。
ASP.NET——该模块扩展了IIS,使之能通过.NET Framework创建Web页面。
Web服务——可通过Web访问的组件,并可以在应用程序中使用。它们可以提供任何功能,例如新闻标题、天气预报、股票走势等。

2.1.1 编译(从用户代码到机器代码)
将用户代码(用高级语言编写的程序代码)转换为机器代码(机器可以识别的二进制代码)的过程称为编译。编译过程包括将本机环境信息写入经编译的程序代码这一过程,因此编译后的程序代码可以高效地利用计算机的所有可用资源。
预编译代码:在使用前时行编译的代码。对于这种代码,由于编译器有机会花时间分析全部的代码和要运行它的机器,因此代码能够以很快的速度执行。不过,由于预编译的代码是针对某一计算机的,因此除非仍在该计算机上运行编译后的代码,否则需要将另一台计算机设成与第一台计算机相同的系统与资源。
解释代码:边执行边编译的代码。这种代码执行较慢,因为需要为每个请求编译代码,且系统没有机会全面优化所编译的代码。不过,其优点是解释过程可以调整,以适应运行代码的机器。
所以,开发人员在选择语言时将面临一个两难的局面。他们可以选择较慢的解释代码以适应运行代码的机器,也可以选择较快的预编译代码但移植性较差。

2.1.2 中间语言介绍
.NET在编译时采用两步法来解决这个问题。.NET编译器将程序代码编译成MSIL的特殊格式,编译过程包括了一些代码,但并没有针对某台机器进行优化。因此,MSIL具有一般的优化性能,并可以移植到任何.NET服务器上。
当用户执行编译为MSIL的页面时,将其传给公共语言运行时CLR,CLR使用JIT(Just-In-Time)编译器将代码编译成真正的机器码,并对程序进行最后的、且与机器相匹配的优化,以使程序能在其所在的计算机上以尽可能快的速度运行。
因此,MSIL和CLR组合使用,具有两种编译代码的优点:预编译代码的结构优化和解释代码的可移植性。
更为重要的是,MSIL本身与机器无关,因此,可以在装有CLR的任一计算机上运行。

2.1.3 对象
对象是自包含的功能单位,就像一个小型程序,其中包含可以完成特定任务的数据或代码。使用预先编写好的对象有如下优势:
① 避免为多次使用而重复编写代码
② 对象允许购买超出我们开发能力范围或资源的功能
③ .NET对象是标准化的,其他程序员可以方便的发现和使用对象的功能
④ 对象可以用任何与.NET兼容的语言编写。
模型对象称为类定义。

2.1.4 .NET的基类
.NET Framework的一个非常重要的特性是它具有基类库,它可以使程序员避免那些工作量大得令人头疼、且枯燥无味的编码工作。基类库中包含大量微软已经编写好的代码,程序员可以将它们包括到任一程序中。要利用这些代码,只需要知道如何使用对象即可,不需要理解代码的内部工作原理。
命名空间:.NET用命名空间将功能相似的类组合到一起。为了使用包含在命名空间中的类,需要导入这些命名空间。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#52005/11/4 9:37:20
2.2 ASP.NET的工作原理
ASP.NET文件以.aspx扩展名保存。
当安装.NET时,本地的IIS Web服务器会自动配置以查找扩展名为.aspx的文件,且用ASP.NET模块(名为aspnet_isapi.dll的文件)处理这些文件。

在Web页面中插入ASP.NET代码有3种方式:
1:使用内联代码:使用<% %>作为界定符,在ASP中经常使用,在ASP.NET中不推荐使用。
2:使用<script runat="server">脚本代码
一个应用程序(多个页面)的各个部分可以使用多种语言编写,但不能在一个页面上混合使用多种语言。
C#代码可以位于ASPX页面的任何地方。
每个代码块都必须位于一个函数或方法声明中。
方法在其他代码触发它时执行。它也许会触发一次,也许触发多次,也许永远不触发。
如何在第一次建立页面时,让某类触发器自动运行代码?换言之,无论事件是否发生,都执行某些代码?在创建页面时,ASP.NET模块会执行位于一个特定方法即Page_Load()中的所有代码。
3:使用服务器控件

2.3 第一个例子:hello!The World!
1、打开 Microsoft Visual Studio .NET 2003。
2、执行:文件/添加新项,弹出对话框,在右侧模板中选择Web窗体,在下面输入文件名称,单击打开按钮,进入设计窗口。
3、将鼠标移到窗体左侧的工具箱,选择Label工具。
4、在窗口中添加一个Label服务器控件。在右侧的属性窗口中,输入其ID:lblMsg。
5、双击lblMsg控件,打开Hello.aspx.cs文件,在Page_Load()方法中输入代码:lblMsg.Text="Hello!The World!";

图片如下:

6、在右侧的解决方案资源管理器窗口中,右击hello.aspx文件,选择设为起始页。

图片如下:

7、按下F5,启动。可以看到在浏览器窗口中显示出了信息:Hello!The World!



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#62005/11/4 9:53:52
感觉《ASP.NET 1.1 入门经典——Visual C#.NET 2003编程篇》这本书不太好,所有例子都围着Web Matrix转,看着比较晕。再借鉴一本书吧,《ASP.NET技术内幕》,但是它用的编程语言是VB,还是要将VB代码转换成C#代码,真是烦。



icyfire

职务:普通成员
等级:1
金币:0.0
发贴:10
注册:2004/11/30 19:10:59
#72005/11/4 10:01:54
废话过多~



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#82005/11/4 10:06:56
补充
关于窗体:
在ASP.NET中,引入了窗体的概念,想来想去,也不知道它的定义是什么。有N种说法。
通过Web页面向Web服务器传送信息的方法称为窗体。
用于从浏览器向服务器传送数据。
位于<form runat="server"></form>标记中的代码;
我还是干脆将其理解为用于向Web服务器传送数据的Web表单页面吧。

Web表单页面的构成:
Web表单页面是由两个构件组成的。
①用户界面:使用ASP.NET服务器控件组装用户界面的动态部分,ASP.NET控件使您能显示智能HTML表单以及提供数据库数据的交互式网格。
②应用逻辑:用于处理控件和页面事件。包括点击按钮时执行的代码,或者获取在控件中显示的数据库数据的代码。

充分体现出了界面与后台分开!

命名空间:
.NET框架类库包含了大量用于创建ASP.NET页面的类(三千多个),这些类由命名空间组成层次结构。
命名空间是类的逻辑分组,它组织成一个层次结构——逻辑树。这个树的根是System。
在ASP.NET页面中,可以默认的使用某些命名空间中包含的类,称做标准的ASP.NET命名空间。对于其他命名空间,则必须显式地导入。这些默认的命名空间包含ASP.NET应用程序中最常用的类,如下所示:
System
System.Collections
System.Collections.Specialized
System.Configuration
System.Text
System.Text.RegularExpressions
System.Web
System.Web.Caching
System.Web.Security
System.Web.SessionState
System.Web.UI
System.Web.UI.HTMLControls
System.Web.UI.WebControls

编辑历史:[此帖最近一次被 diffmaker 编辑过(编辑时间:2005-11-04 10:41:32)]


浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#92005/11/4 10:11:54
icyfire在上个帖子中说
引用:
废话过多~

您老人家是高手,肯定觉得废话过多,偶可是新手呀,刚开始学。争取过两个月,让您觉得说得太少、太不详细了。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#102005/11/4 17:58:34
第三章 服务器控件和变量

3.1 窗体

用于向Web服务器传送数据的Web表单页面。创建 Web 窗体页时,您可以使用以下控件类型:

① HTML 服务器控件
HTML 服务器控件是 HTML 元素,这些元素包含使其自身在服务器上可见并可编程的属性。默认情况下,服务器无法使用 Web 窗体页上的 HTML 元素;这些元素被视为传递给浏览器的不透明文本。但是,通过将 HTML 元素转换为 HTML 服务器控件,可将其公开为可在服务器上编程的元素。
页上的任意 HTML 元素都可以转换为 HTML 服务器控件。转换是一个只涉及几个属性的简单过程。作为最低要求,通过添加 RUNAT="SERVER" 属性,HTML 元素即可转换为控件。这将在分析期间提醒 ASP.NET 页框架,它应该创建该控件实例,以便在服务器端页处理期间使用。如果要在代码中作为成员引用该控件,则还应当为控件分配 ID 属性。
例如:
<a href="http://www.3gcolor.com">3G色网</a>
这是一个HTML元素,如果改为下面的形式,那么就将它转换成了HTML服务器控件了:
<a href="http://www.3gcolor.com" id="lnk3GColor" runat="server"">3G色网</a>

② Web 服务器控件
这些控件比 HTML 服务器控件具有更多内置功能。Web 服务器控件不只包括窗体类型的控件,例如按钮和文本框;而且还包括特殊用途的控件,例如日历。

③ 验证控件
包含逻辑以允许测试用户输入的控件。将一个验证控件附加到输入控件,测试用户对该输入控件输入的内容。验证控件可用于检查必填字段,对照字符的特定值或模式进行测试,验证某个值是否在限定范围之内以及其他目的。

④ 用户控件
用户自己创建的控件。

3.2 Web窗体页中的<form>标记

<form id="Form1" runat="server"></form>
runat="server"属性告诉Web服务器应该处理窗体本身,而不是只将它传送到浏览器。注意,这里没有提供method和action属性。
在默认情况下,标准的HTML表单标记的mehtod属性的值是GET,在提交具有method="GET"属性的表单时,表单数据做为查询字符串变量提交。但是无法在查询字符串是提交大量表单数据,若要提交大量表单数据,需要使用POST方法,将method的属性值设为POST。
ASP.NET的Web窗体页面中,表单数据默认为以POST方式传送,并自动的发送回相同的页面,也就是说提交给自己。

3.3 使用服务器控件的优势

1、直观的对象模型
通常,Web服务器忽略页面中的HTML标记。从Web服务器的角度看,这些标记是发送到Web浏览器的无意义的字符串。由浏览器去分析,不是偶的任务!但是,将HTML标记转换为ASP.NET服务器控件之后,对于Web服务器来说,这些标记不再是无意义的字符串了。标记变成了服务器端对象,它具有可以在程序中操作的属性、方法、集合和事件。
将标准的HTML标记转换为服务器控件,为编程提供了许多可能,可以通过服务器操作对象的属性,可以编写应用逻辑来读取或修改对象的属性,甚至可以通过程序向页面中添加新对象或者隐藏现有的对象。

2、视图状态
先来做个实验吧。新建一个窗体,在窗体上添加一个Web服务器控件TextBox和两个HTML文本框,将其中的一个作为服务器控件运行(也就是说将其转换为HTML服务器控件),再添加三个Web服务器控件Label说明一下,最后再添加一个Web服务器控件Button,如下图所示。

图片如下:


按下F5运行它,在浏览器窗口中输入数据。

图片如下:

提交表单,结果如下:

图片如下:

可以看到我们刚才在服务器控件中输入的数据保留下来了,而HTML文本框中的数据丢失了。这种用服务器控件创建的表单是智能的。微软将这种自动保留数据的特性称作视图状态(View State)。ASP.NET控件自动的保留视图状态。
视图状态不只应用于与表单元素对应的ASP.NET控件;所有标准的ASP.NET控件都会保留它们的视图状态。注意:只有表单被发送回本身时,才保留视图状态。
视图状态有什么作用呢?以前,用户填写表单提交后,如果有需要必填的数据用户没有添,或者用户所填的数据不符合要求,用户就需要重新填写所有的数据。有了视图状态,用户所做的只是修改原来的数据。视图状态使得表单对用户更友好了。

3、将代码与内容分离
ASP.NET控件提供了分离代码(应用逻辑)和内容(页面的设计元素)的简洁方式。设计人员可以将ASP.NET控件放入页面,而不用为应用逻辑担心。

4、浏览器兼容性
ASP.NET页面在服务器上执行,而不是在浏览器上。当浏览器请求ASP.NET页面时,会获得标准的HTML页面。这意味着ASP.NET页面可以与任何浏览器兼容。

开始发现看懂教程要比写懂教程容易多了。

编辑历史:[此帖最近一次被 diffmaker 编辑过(编辑时间:2005-11-07 16:04:50)]


浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#112005/11/6 23:40:05
3.4 HTML服务器控件
对于每个最常见的HTML标记,有一个服务器端HTML控件与之对应,只需要在标记的末尾添加runat="server"属性,就可以创建它的HTML服务器控件版本。
HTML控件都在System.Web.UI.HTMLControls命名空间中。

3.5 Web服务器控件
Web控件在System.Web.UI.WebControls命名空间中。
HTML控件几乎与标准HTML标记一一对应,而Web控件就不是这样,Web控件是标准HTML标记的更合理的版本。

3.5.1 基本Web服务器控件属性
所有的Web控件都需要两个属性,第一个属性是runat="server",它告诉ASP.NET在服务器上处理控件,并为控件执行所有的ASP.NET功能,包括状态的创建。第二个属性是ID,用于在代码中操纵控件。此外,从WebControl类派生出来的Web控件还具有下面的共同属性:

·ForeColor:控件的前景色。
·BackColor:控件的背景色。
·BorderColor:控件的边框色。
·BorderWidth:控件的边框宽度,(以像素为单位)。
·BorderStyle:控件的边框样式,可用值如下:
NotSet 不设置边框样式
None 无边框
Dotted 虚线边框
Dashed 点划线边框
Solid 实线边框
Double 双实线边框
Groove 凹槽状边框
Ridge 突起边框
Inset 内嵌边框
Outset 外嵌边框
与浏览器及其版本有关,有些区别不是很大。
·Style:控件的CSS样式属性。
·CssClass:控件的CSS样式类。
·Enabled:控件是否可用。
·Visible:控件是否可以。
·Width:控件的宽度,默认单位是像素。
·Height:控件的高度,默认单位是像素。
·ToolTip:当用户将鼠标指针停放在控件上方时显示的文本。
·TabIndex:控件的位置(按 Tab 键顺序)。如果此属性未设置,则控件的位置索引为 0。
·Font:控件的字体。此属性包含子属性,可在元素的开始标记中使用属性-子属性语法来声明这些子属性。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#122005/11/7 11:26:21
边框样式

图片如下:

foreach (string s in Enum.GetNames(typeof(BorderStyle)))
{
	for(int i=1;i<=3;i++)
	{
		TextBox mytxtbox=new TextBox();
		mytxtbox.Font.Size=10;
		mytxtbox.BackColor=Color.Pink;
		mytxtbox.BorderStyle=(BorderStyle)Enum.Parse(typeof(BorderStyle),s.ToString());
		mytxtbox.BorderWidth=i;
		mytxtbox.Text=s.ToString()+"(宽"+i+"像素)";
		myPanel.Controls.Add(mytxtbox);
	}
}



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#132005/11/9 14:16:42
3.5.2 Label控件

用于在Web页面上显示文本,它对应于HTML中的<span>标记。它提供了一种以编程方式设置 Web 窗体页中文本的方法。如果想显示静态文本,可以使用 HTML 进行显示;并不需要使用 Label 控件。仅当需要在服务器代码中更改文本的内容或其他特性时,才使用 Label 控件。

语法一:<asp:Label id="mylbl" runat="server">我的第一个Web服务器控件</asp:Label>

语法二:<asp:Label id="mylbl" runat="server" Text="我的第一个Web服务器控件"/>

<asp:>前缀表示该控件属于ASP.NET的内置控件。这个控件有一个重要的属性:Text,用于获取或设置Label控件的文本内容。

以编程的方式创建Label控件并设置它的Text属性
private void Page_Load(object sender, System.EventArgs e)
{
  Label mylbl=new Label();
  mylbl.BorderWidth=Unit.Pixel(3); 
  mylbl.BorderColor=Color.Red; 
  mylbl.BorderStyle=BorderStyle.Dashed;
  mylbl.Font.Size=FontUnit.Point(10); 
  mylbl.Text="通过程序创建的文本";
  Page.Controls.Add(mylbl);
}

·C#是一种强类型化的语言,每个变量都必须有数据类型。
·在C#中,变量名是区分大小写的。
·每条C#语句都以分号(;)结束。
·请记住上面的宽度、颜色、边框类型及字体大小的赋值方法。
·以程序方式设定Label控件的Text属性,会覆盖掉控件中原有的内容。



浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#142005/11/9 14:31:02
3.5.3 TextBox控件


图片如下:


这个控件可以用来显示标准的HTML文本输入框、密码框和文本域。它具有如下属性:

·AutoPostBack
如果设置为true,每当用户修改 TextBox 控件中的文本并使焦点离开该控件时,是否都向服务器自动回送。
默认为 false。

Columns
获取或设置文本框的显示宽度(以字符为单位)。
默认值为 0,表示未设置该属性。

MaxLength
获取或设置文本框中最多允许的字符数。
默认值为 0,表示未设置该属性。
仅当控件作为单行文本框或密码输入框时,此属性才适用。

ReadOnly
获取或设置一个值,用于指示能否更改 TextBox 控件的内容。
默认值为 false。

Rows
获取或设置多行文本框中显示的行数。
默认为 0,表示显示单行文本框。
仅当控件作为多行文本框时,此属性才适用。

Text
获取或设置 TextBox 控件的文本内容。
默认值为空字符串。

TextMode
获取或设置 TextBox 控件的行为模式。
SingleLine-单行、MultiLine-多行、Password-密码

Wrap
获取或设置一个值,该值指示多行文本框内的文本内容是否换行。
默认为 true。
仅当控件作为多行文本框时,此属性才适用。
将本属性设置为false时,会出现水平滚动条。

Enum.Parse()方法:
功能:将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。
语法:public static object Parse(Type enumType, string value);
用途:在为控件设置枚举型属性值时需要使用。先记住再说吧。
示例:
myTextBox.BorderStyle=(BorderStyle)Enum.Parse(typeof(BorderStyle),"dotted")
myTextBox.TextMode=(TextBoxMode)Enum.Parse(typeof(TextBoxMode),"Password")
当然,如果属性值不变的话可以使用如下语法:
myTextBox.BorderStyle=BorderStyle.dotted;
myTextBox.TextMode=TextBoxMode.Password;

编程时若要在文本框中显示双引号,如:He said:"Good Morning!",请使用两个双引号:
myTextBox.Text="He said:""Good Morning!""";


TextChanged事件:默认情况下,本事件并不马上导致向服务器发送Web窗体页。而是在下一次发送窗体时,在服务器代码中引发该事件。若要使TextChanged事件导致立即发送,请将TextBox控件的AutoPostBack属性设置为true。(要求客户端浏览器必须支持javascript,因为Web服务器要将javascript发送到浏览器以便捕捉该事件

编辑历史:[此帖最近一次被 diffmaker 编辑过(编辑时间:2005-11-14 11:43:23)]


浮尘

职务:普通成员
等级:3
金币:7.0
发贴:1258
注册:2001/11/19 12:41:09
#152005/11/14 17:43:26
3.5.4 Button控件
可以使用Web控件在表单中添加三种按钮(功能类似,但外观不同):
Button:表示一个标准的命令按钮,呈现为一个 HTML 提交按钮。
LinkButton:呈现为页面中的一个超链接。但是,它包含使窗体被发回服务器的客户端脚本。
ImageButton:允许您将一个图形指定为按钮。该控件还查明用户在图形中单击的位置,这使您能够将按钮用作图像映射。
当用户单击时,所有三种类型的按钮都会使窗体被提交给服务器。这些按钮还可引发它们自己的 Click 事件,您可以为这些事件编写事件处理程序。

·Button控件

属性
Text:获取或设置在按钮中显示的文本标题。
CommandArgument:获取或设置可选参数,当单击按钮时,将这个值传递Command事件。
CommandName:获取或设置命令名,当单击按钮时,将这个值传递Command事件。
CausesValidation:获取或设置一个值,该值指示在单击按钮时是否验证表单。

事件
Click:在单击按钮时发生。
Command:在单击按钮时发生,CommandArgument、CommandName参数的值被传递给本事件。
注意:先引发Click事件,再引发Command事件。

·LinkButton控件
LinkButton 控件的外观与 HyperLink 控件相同,但功能与 Button 控件相同。如果单击控件时要链接到另一个 Web 页,可以考虑使用 HyperLink 控件。
LinkButton 控件将 javascript 呈现给客户端浏览器。客户端浏览器必须启用 javascript 才能使该控件正常工作。

·ImageButton控件
ImageButton 控件具有如下特殊属性,CommandArgument、CommandName、CausesValidation 属性及事件与Button控件相同,请参照前面内容。
AlternateText:获取或设置当图像不可用时,Image控件中显示的替换文本。
ImageAlign:获取或设置Image控件相对于Web页上其他元素的对齐方式。
ImageUrl:获取或设置在 Image 控件中显示的图像的位置。

·示例:创建一个简单的加减法计算器
①创建界面元素:新建一个窗体Button.aspx,在窗体上添加:
两个TextBox控件:txtOpt1和txtOpt2
三个Button控件:btnAdd、btnSub和btnReset
一个Label控件:lblResult
调整它们的大小和位置图。

图片如下:


②为三个按钮添加如下属性

CommandName CommandArgument
btnAdd Add 加法
btnSub Sub 减法
btnReset Reset 复位

③添加应用逻辑:选中btnAdd加号按钮,单击属性窗口中的闪电按钮(如图),切换到事件窗口。在Command事件的后面输入start_operate,然后双击它,打开Button.aspx.cs,我们可以看到系统已经自动为我们添加了如下代码:

图片如下:


粉红色部分为系统自动添加的代码

图片如下:

用同样的方法为btnSub、btnReset按钮添加Command事件start_operate。

④打开Button.aspx.cs,在 start_operate 函数中输入如下应用逻辑:
private void start_operate(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
    lblResult.Text="您执行了"+e.CommandArgument+"操作。";
    if(e.CommandName=="Add"){
        lblResult.Text+="操作结果是:"+Convert.ToString((Convert.ToInt32(txtOpt1.Text)+Convert.ToInt32(txtOpt2.Text)));
    }
    if(e.CommandName=="Sub")
    {
        lblResult.Text+="操作结果是:"+Convert.ToString((Convert.ToInt32(txtOpt1.Text)-Convert.ToInt32(txtOpt2.Text)));
    }
    if(e.CommandName=="Reset")
    {
        txtOpt1.Text="";
        txtOpt2.Text="";
        lblResult.Text+="文本框中的数据已经被清除";
    }
}

⑤保存文件,按下F5运行,如下图所示。

图片如下:


说明:这个程序还有很多毛病,最主要的是没有在提交前进行表单验证,一旦输入的数据无效,就会报错。但本例的目的的练习按钮控件的使用,以及如何为按钮添加事件处理。另外,还要牢记,C#是强类型化的语言,在计算和赋值前注意进行类型转换。