c全部章节第十章_第1页
c全部章节第十章_第2页
c全部章节第十章_第3页
c全部章节第十章_第4页
c全部章节第十章_第5页
已阅读5页,还剩40页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章Web应用程序ASP.NET是Microsoft的新一代服务器端技术,是.NET框架的一部分。运用C#可以创建Web应用程序。本章介绍ASP.NET的基本概念,以及如何使用ASP.NET建立Web应用程序。10.1ASP.NET简介10.1.1用C#创建Web应用程序1996年,Microsoft公司推出了功能强大的服务器端脚本编程环境ASP,2001年版本更新为ASP3.0。ASP.NET虽然是ASP3.0的延续,但它是一种完全不同的网页开发手段。它建立在.NET平台上,在基于公共语言运行库(CLR)的编程框架的服务器上可以生成功能强大的Web应用程序。下面用C#创建一个简单的Web应用程序。打开VisualStudio2005,选择“文件”→“新建”→“网站”选项,在“新建网站”对话框的“位置”选项中选中“文件系统”,“语言”选中“VisualC#”,“模板”选择“ASP.NET网站”,选择存放路径,然后单击“确定”按钮,如图10.1所示进入工作区后,切换到“设计视图”,逐个添加控件,这个过程与Windows添加控件的过程相同。在“视图”→“工具箱”栏,选择“Web窗体”选项,将控件拖入页面。每个控件的左上角都有一个绿色的小箭头,表示它是一个Web控件。ASP.NET的控件分为两类:HTML控件和Web控件,后面将作较详细的讲解。将WebForm1.aspx重命名为Multiply.aspx。页面控件设置如表10.1所示。双击EqualButton控件,为EqualButton控件添加Click事件,代码如下:privatevoidEqualButton_Click(objectsender,System.EventArgse){

ResultLabel.Text=(double.Parse(NumberText1.Text)*double.Parse(NumberText2.Text)).ToString();}生成解决方案后运行,显示结果如图10.2所示。上述ASP.NET简单的Web应用程序由Multiply.aspx和Multiply.aspx.cs文件组成,为了深入了解ASP.NET,下面分析Multiply.aspx和Multiply.aspx.cs的代码。如果将Web窗体设计器中的Multiply.aspx从“设计”转换到“HTML”视图,看到的文件非常类似于HTML文件,但与HTML文件又不同。【例10.1】分析ASP.NET的页面文件Multiply.aspx。<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Multiply.aspx.cs"Inherits="_Default"%><!DOCTYPEhtmlPUBLIC"//W3C//DTDXHTML1.0Transitional//EN""xhtml1/DTD/xhtml1transitional.dtd"><htmlxmlns=""><headrunat="server"><title>无标题页</title></head><body><formid="form1"runat="server"><div><asp:LabelID="NumberLabel1"runat="server"Style="zindex:100;10.1.2ASP.NET程序结构left:124px;position:absolute;top:112px"Text="Number1"></asp:Label><asp:LabelID="NumberLabel2"runat="server"Style="z

index:101;left:273px;position:absolute;top:114px"Text="Number2"></asp:Label><asp:TextBoxID="NumberText1"runat="server"Style="z

index:102;left:103px;position:absolute;top:159px"Width="94px"></asp:TextBox><asp:TextBoxID="NumberText2"runat="server"Style="z

index:103;left:255px;position:absolute;top:159px"Width="94px"></asp:TextBox><asp:LabelID="MultiplyLabel"runat="server"Style="z

index:104;left:221px;position:absolute;top:162px"Text="*"></asp:Label><asp:ButtonID="EqualButton"runat="server"Style="z

index:105;left:378px;position:absolute;top:159px"Text="="Width="43px"OnClick="EqualButton_Click"/><asp:LabelID="ResultLabel"runat="server"Style="z

index:107;left:442px;position:absolute;top:161px"></asp:Label></div></form></body></html>(1)上述代码中第一行:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Multiply.aspx.cs"Inherits="_Default"%>Pagelanguage="c#"表明编程语言为C#,ASP.NET代码也可以采用其他的编程语言,如VB或J#语言。对应的C#程序文件为Multiply.aspx.cs,对应的代码类为Multiply.aspx.cs。Multiply.aspx都是标记语言,所有的程序代码都放在了Multiply.aspx.cs中,ASP.NET这种形式的代码与页面文件的分离,是非常有好处的。(2)Multiply.aspx中标签Label、按钮Button、文本框TextBox之前都加上了前缀“asp:”,每一个服务器控件都有runat=“server”,表明它们是服务器控件,HTML控件也具有这样的属性,表明它们运行于服务器端,且拥有各种可编程属性及事件与HTML文件的不同之处在于:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;publicpartialclass_Default:System.Web.UI.Page{protectedvoidEqualButton_Click(objectsender,EventArgse){ResultLabel.Text=(double.Parse(NumberText1.Text)*double.Parse(NumberText2.Text)).ToString();}}可以看出,ASP.NET页面所对应的服务器端代码与在WinForm中所用到的C#代码在结构上基本一致,都有名字空间、类等,是完全的面向对象的代码结构。这样的结构,大大减小了网页设计与一般WinForm程序设计的差异,它们的设计过程都可以概括成以下模式:(1)将控件拖入页面,修改属性及ID。(2)添加控件的事件处理方法,修改各控件的属性表现,完成功能并显示结果。【例10.2】

分析ASP.NET页面的代码文件Multiply.aspx.cs。10.2.1WebForm基础ASP.NET中WebForm指的是一个Web页面,它像一个容器,包容了各种控件。有的翻译成Web表单,这容易与标记<Form></Form>混淆,所以本书一般指Web页面。页面都以.aspx为扩展名,如Multiply.aspx。在Web页面中,可以对各种控件建立对应的事件。在10.1节中,Button控件的“单击Click”事件,事件代码则执行两个数的相乘。下面再举个例子。10.2WebForm以下是aspx的源代码:<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%><htmlxmlns=""><headrunat="server"><title>无标题页</title></head><body><formid="form1"runat="server"><div><asp:LabelID="Label1"runat="server"Style="zindex:100;left:41px;position:absolute;top:61px"Text="用户名:"></asp:Label><asp:LabelID="Label2"runat="server"Style="zindex:101;left:41px;position:absolute;top:97px"Text="密码:"></asp:Label><asp:TextBoxID="tb_name"runat="server"Style="zindex:102;left:133px;position:absolute;top:59px"Width="148px"></asp:TextBox><asp:LabelID="Label3"runat="server"FontBold="True"ForeColor="Red"Style="zindex:103;left:40px;position:absolute;top:18px"Text="新会员注册页面"Width="148px"></asp:Label><asp:TextBoxID="tb_pwd1"runat="server"Style="zindex:104;left:134px;position:absolute;top:96px"TextMode="Password"Width="148px"></asp:TextBox><asp:LabelID="Label4"runat="server"Style="zindex:105;left:40px;position:absolute;top:136px"Text="确认密码:"></asp:Label>【例10.3】

ASP.NET事件。<asp:TextBoxID="tb_pwd2"runat="server"Style="z

index:106;left:135px;position:absolute;top:135px"TextMode="Password"Width="148px"></asp:TextBox><asp:LabelID="Label5"runat="server"Style="z

index:107;left:41px;position:absolute;top:179px"Text="电子邮箱:"></asp:Label><asp:TextBoxID="tb_mail"runat="server"Style="z

index:108;left:134px;position:absolute;top:176px"Width="148px"></asp:TextBox><asp:LabelID="Label6"runat="server"Style="z

index:109;left:39px;position:absolute;top:223px"Text="是否公开邮箱:"Width="120px"></asp:Label><asp:RadioButtonID="rb_yes"runat="server"GroupName="IsPublic"Style="z

index:110;left:170px;position:absolute;top:222px"Text="是"/><asp:RadioButtonID="rb_no"runat="server"Checked="True"GroupName="IsPublic"Style="z

index:111;left:249px;

position:absolute;top:222px"Text="否"/><asp:ButtonID="btn_submit"runat="server"OnClick="btn_submit_Click"Style="z

index:112;left:44px;position:absolute;top:269px"Text="提交信息"Width="83px"/><hrstyle="z

index:114;left:45px;width:451px;position:absolute;top:313px;height:1px"/><asp:LabelID="SubmitResult"runat="server"Height="122px"Style="z

index:115;left:45px;position:absolute;top:331px"Text="Label"Width="393px"></asp:Label></div></form></body></html>在“提交”按钮的Click事件中添加如下代码:protectedvoidbtn_submit_Click(objectsender,EventArgse){System.Text.StringBuildersb=newSystem.Text.StringBuilder();sb.Append(string.Format("您输入的用户名是:{0}<br>",tb_name.Text));if(tb_pwd1.Text!=tb_pwd2.Text){sb.Append("您的两次密码不一致,请检查!<br>");}else{sb.Append(string.Format("您输入的密码为:{0}<br>",tb_pwd1.Text));}sb.AppendLine(string.Format("您输入的邮箱是:{0}<br>",tb_mail.Text));if(rb_yes.Checked){sb.Append("您已选择了公开邮箱!<br>");}else{sb.Append("您已选择了不公开邮箱!<br>");}SubmitResult.Text=sb.ToString();}生成解决方案后运行,结果如图10.3所示。在ASP.NET中,除了控件具有事件外,每次ASP.NET页面在运行时,也会触发Page对象的事件,如表10.2所示。10.2.2页面事件新建一个Web页面,从工具箱中拖曳一个Label控件到页面上,将其ID命名为Message,在Page的不同事件中输入代码://Page对象的Load事件voidPage_Load(Objectsender,EventArgse){ Message.Text+="发生Page对象的Load事件<Br>";}//Page对象的Init事件voidPage_Init(Objectsender,EventArgse){ Message.Text+="发生Page对象的Init事件<Br>";}//Page对象的PreRender事件voidPage_PreRender(Objectsender,EventArgse){ Message.Text+="发生Page对象的PreRender事件<Br>";}//Page对象的Unload事件voidPage_Unload(Objectsender,EventArgse)【例10.4】

页面事件演示。{ Message.Text+="发生Page对象的Unload事件<Br>";}再从工具箱中拖曳一个Button控件到页面上,在其Click事件中添加如下代码:voidButton1_Click(Objectsender,EventArgse){ Message.Text+="用户单击确定按钮,";}单击“确定”按钮前后页面如图10.4和图10.5所示。

与Web页面紧密联系的还有Page对象的一个重要属性:IsPostBack。Load事件与IsPostBack属性结合使用,一般用来检查是不是第一次加载Web页面,在此基础上可以控制程序的流向。【例10.5】

IsPostBack属性示例。新建一个Web页面,向页面中添加一个Button控件和一个Label控件,在页面的Load事件中添加如下代码:protectedvoidPage_Load(objectsender,EventArgse){ if(IsPostBack==true) { Label1.Text="IsPostBack等于true,客户端已经发回数据"; }10.2.3IsPostBack属性else { Label1.Text="IsPostBack等于false,第一次打开网页"; }}ASP.NET一共有50多种控件,分成两大类:HTML控件和服务器控件。本节和10.4节分别介绍这两种控件。每一种普通HTML标记的末尾加上runat=“Server”就成HTML标记的服务器版,因此HTML控件都对应着标准HTML标记,如表10.3所示。ASP.NET引入HTML控件的目的就是将现有的HTML文件简单地转换成ASP.NET页面。下面重点讲述经常遇到的HTML控件<span>。<span>有以下两个属性。(1)InnerHTML——设置或取出不含标记本身的控件对象子标记与内容。(2)InnerText——设置或输出控件对象的文字内容。<span>标记用法如下所示。<spanID=''Show1''Runat=''Server''></span>10.3HTML控件表10.3HTML控件与标准HTML标记的对应关系表//SpanExample.aspx<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="SpanExample.aspx.cs"Inherits="SpanExample"%><htmlxmlns=""><headrunat="server"><title>无标题页</title></head><body><formid="form1"runat="server"><div><br/><asp:LabelID="Label1"runat="server"Text="请输入用户名:"Width="115px"></asp:Label><asp:TextBoxID="userName"runat="server"Width="135px"></asp:TextBox><br/><br/><asp:LabelID="Label2"runat="server"Text="请输入密码:"Width="116px"></asp:Label><asp:TextBoxID="userPassword"runat="server"TextMode="Password"Width="135px"></asp:TextBox><br/>【例10.6】Span的使用。<br/><asp:ButtonID="Button1"runat="server"Text="确定"Width="58px"OnClick="Button1_Click"/><br/><br/><asp:LabelID="Label3"runat="server"Text="您输入的用户名是:"Width="150px"></asp:Label><spanid="user"runat="server"></span><br/><br/><asp:LabelID="Label4"runat="server"Text="您输入的密码是:"Width="150px"></asp:Label><spanid="pwd"runat="server"></span></div></form></body></html>在“确定”按钮的Click事件中添加如下代码。protectedvoidButton1_Click(objectsender,EventArgse){//利用HTML控件的Value方法,获取用户输入的数据

user.InnerText=userName.Text;pwd.InnerText=userPassword.Text;}单击“确定”按钮后页面如图10.8所示。HTML控件是为了将以前的标准HTML标记快速转换成ASP.NET页面。ASP.NET的服务器控件是全新设计的,是HTML的改进,更精确,功能更强大。服务器控件使用的格式:<asp:TextBoxid="TextBox1"Width="192px"Height="48px"runat="server"></asp:TextBox>更简单的写法:<asp:TextBoxid="TextBox1"Width="192px"Height="48px"runat="server"/>asp:是服务器控件的固定写法;TextBox表明使用的是TextBox服务器控件;id是控件的名称;Width和Height指控件显示的宽度和高度;runat表明是在服务器端处理。服务器控件可以分成以下几种。10.4服务器控件可以用基本服务器控件创建标准HTML标记的服务器端版本,以取代HTML控件。基本服务器控件如表10.4所示。1.基本服务器控件上述控件允许设置字体、颜色、边框和样式等属性,常用的属性如表10.5所示。为能验证客户在表单中输入的数据,ASP.NET引入Web验证控件。Web验证控件如表10.6所示。2.Web验证控件3.数据控件数据控件用于数据的显示,包括GridView、DataList、Repeater等控件。4.复杂控件复杂控件包括日历控件Calendar、广告条显示控件AdRotator等。5.移动控件<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%><htmlxmlns=""><headrunat="server"><title>无标题页</title></head><body><formid="form1"runat="server"><div><asp:LabelID="Label1"runat="server"Text="请输入课程成绩:"></asp:Label> <br/><br/> <asp:TextBoxID="score"runat="server"Width="85px"></asp:TextBox><asp:RangeValidatorID="RangeValidator1"runat="server"ErrorMessage="必须介于0到100之间的数字!"Width="220px"ControlToValidate="score"MaximumValue="100"MinimumValue="0"Type="Integer"></asp:RangeValidator><br/><br/><asp:ButtonID="Button1"runat="server"Text="提交"OnClick="Button1_Click"/><br/><br/><spanid="Show1"runat="server"></span></div>【例10.7】

Web验证控件RangeValidator示例</form></body></html>在Button1的Click事件中添加如下代码。protectedvoidButton1_Click(objectsender,EventArgse){stringstr;if(Page.IsValid){str=string.Format("输入的成绩是:{0}",score.Text);Show1.InnerText=str;}}运行结果页面如图10.9所示。这个例子中使用了服务器控件的按钮控件Button、文字控件TextBox和验证控件RangeValidator。RangeValidator用来检查输入值是否符合特定的数字范围,它的属性含义分别是:

ControlToValidate——指定验证的控件名称,这里是score。

MinimumValue——RangeValidator控件定义的最小值,这里取0。

MaximumValue——RangeValidator控件定义的最大值,这里取100。

Type——要验证的控件数据类型,这里选择Integer(整型)。

Display——使用Dynamic错误信息显示方式。

ErrorMessage——超出RangeValidator控件定义的范围时将显示的内容。程序中使用

Page对象的IsValid属性检查输入的内容是否在有效范围之内。如果返回值为True,表示输入值在RangeValidator控件定义的范围之内,否则将显示ErrorMessage属性内容。新建一个Web页面,从工具箱中拖曳一个GridView控件到页面上,选择一个合适的样式,用代码从数据库中检索数据并绑定到GridView控件上。在Page_Load事件处理函数中添加如下代码:protectedvoidPage_Load(objectsender,EventArgse){stringconnStr=@"DataSource=.\sqlexpress;InitialCatalog=Students;IntegratedSecurity=True";stringsql="selectStudentNo,StudentName,Sex,Birthday,MajorfromstuInfo";SqlConnectionconn=newSqlConnection(connStr);【例10.8】

数据控件GridView示例。DataSetds=newDataSet();sda.Fill(ds);GridView1.DataSource=ds.Tables[0].DefaultView;GridView1.DataBind();}运行结果页面如图10.10所示。10.5.1Web服务概述 Internet正在向下一代Web站点快速演进,今天的Web站点仅为浏览器提供用户界面,而下一代可编程Web站点直接将企业、应用程序、服务和设备彼此链接。这些可编程Web站点将不只是被动访问的站点,而成为可重用的智能Web服务。 下面简单介绍有关Web服务的概念。10.5Web服务的创建与应用Web服务是通过网络远程访问类的属性和方法。先在IIS或其他Web服务器上部署和发布一个远程对象实体,浏览器或其他分布式应用的客户端可以通过Web服务接入文件(扩展名为.asmx)访问该远程对象的属性和方法。它具有如下优点:(1)应用程序可以通过Internet来请求XMLWeb服务,也就是说,Web服务可以方便地实现分布式应用。(2)Web服务使用简单对象访问协议(SimpleObjectAccessProtocol,SOAP)进行通信,SOAP是基于XML的,容易被各种平台上的各种语言程序处理。因此Web服务不仅是跨语言的,而且是跨平台的。(3)能方便地集成现有系统,只需将现有系统按Web服务提供即可,可以认为,Web服务有完全改变设计和开发应用程序方法的潜在能力。1.Web服务的优点<%@WebServiceLanguage="C#"Class="HelloWorld"%>usingSystem;usingSystem.Web.Services;publicclassHelloWorld:WebService{[WebMethod]publicStringSayHelloWorld(){return"HelloWorld";}}将文件保存为HelloWorld.asmx文件名,.asmx表示这是一个Web服务。如果文件保存在虚拟目录ASP.NET中,则在浏览器输入地址:HelloWorld.asmx,如图10.11所示。【例10.9】

创建“HelloWorldWeb服务”。图10.11HelloWorldWeb服务HelloWorld.asmx向外展现了一个方法:SayHelloWorld。单击SayHelloWorld链接,便可以通过浏览器调用这一方法,如图10.12所示。单击“调用”按钮,显示结果如图10.13所示。usingSystem;usingSystem.Web.Services;publicclassHelloWorld:WebService{[WebMethod]publicStringSayHelloWorld(){return"HelloWorld";}}直接用命令行方式将CompiledHelloWorld.cs编译为CompiledHelloWorld.dll:csc/t:library/r:System.dll,System.Web.Services.dllCompiledHelloWorld.cs其中引用了System.dll和System.Web.Services.dll程序集。在ASP.NET目录下再创建一个新目录/bin,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论