c#第13章 ASP NET Web应用程序开发解析_第1页
c#第13章 ASP NET Web应用程序开发解析_第2页
c#第13章 ASP NET Web应用程序开发解析_第3页
c#第13章 ASP NET Web应用程序开发解析_第4页
c#第13章 ASP NET Web应用程序开发解析_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第1部分

第13章ASP.NETWeb应用程序开发

13.1Web应用程序中的常用对象

13.2Global.asax文件

13.3网页的切换与数据传递

13.4在Web.Config中保存配置13.1Web应用程序中的常用对象在Web应用程序运行时,ASP.NET将维护与当前应用程序、每个用户会话、当前HTTP请求、请求的Web窗体页等有关的信息。ASP.NET页框架包含一系列封装此上下文信息的类。在代码中使用这些类的实例访问内部对象。13.1Web应用程序中的常用对象(续)常用的对象及对应类对象名说明ASP.NET类Response提供对当前页的输出流的访问HttpResponseRequest提供对当前页请求的访问HttpRequestServer公开可以用于在页之间传输控件的实用工具方法,对HTML文本进行编码和解码等HttpServerUtilityApplication提供对作用于所有会话的应用程序范围的方法和事件的访问等HttpApplicationStateSession为当前用户会话提供信息等HttpSessionState13.1.1Response与RequestResponse对象:用于向客户端发送信息,该对象提供了很多有用的属性和方法,常用有:

1)Response.Write方法,用于将字符、字符串、字符数组写入HTTP输出内容流。例如:Response.Write("thisisatest.");2)Response.WriteFile方法,用于将指定的文件写入HTTP输出内容流。例如:Response.WriteFile("test.txt");3)Response.Redirect方法,用于将客户端重定向到新的URL。例如:Response.Redirect("test.aspx");13.1.1Response与RequestRequest对象:获取请求的页的HttpRequest

对象。该对象使ASP.NET能够读取客户端在Web请求期间发送的HTTP值。例如:

Request.Browser.Platform

客户端使用的操作系统

Request.Browser.Type

客户端使用的浏览器类型

Request.UserHostAddress

客户端IP地址例13-1protectedvoidPage_Load(objectsender,EventArgse){//在此处放置用户代码以初始化页面

string[]weekDays={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};DateTimenow=DateTime.Now;LabelDateTime.Text=string.Format("今天是{0:yyyy年M月d日}{1}",now,weekDays[(int)now.DayOfWeek]);

LabelInfo.Text=string.Format("您当前的操作系统是:{0},使用的浏览器为:{1},IP地址为:{2}",Request.Browser.Platform,Request.Browser.Type,Request.UserHostAddress);}13.1.2Application与Session对象Application对象是一个应用程序级的对象,它包含的数据可以在整个Web站点中被所有用户使用,并且可以在网站运行期间持久地保存数据,即利用Application对象可以定义类似于所有用户公用的全局变量。由于Application对象被整个网站的所有用户使用,所以对其进行操作时,需要先进行锁定,操作完成后再解除锁定。

Application.Lock();

Application["counter"]=(int)Application["counter"]+1;

Application.UnLock();13.1.2Application与Session对象(续)Session对象可以用来区分不同的浏览器客户。当不同的浏览器客户访问服务器应用程序时,服务器会分别为其分配一段内存空间用于保存不同用户的数据信息,即每一个客户都可以有自己的Session。

定义与使用Session的方法:

Session["online"]=true;

Session["counter"]=(int)Session["counter"]+1;13.2Global.asax文件

Global.asax文件也称为ASP.NET应用程序文件,该文件是一个可选的文件,它包含响应ASP.NET或HTTP模块所引发的应用程序级别和会话级别事件的代码。Global.asax文件驻留在ASP.NET应用程序的根目录中。运行ASP.NET应用程序时,ASP.NET会自动分析Global.asax并将其编译到一个动态生成的.NETFramework类中。由于Global.asax文件不是必需的,因此只在希望处理应用程序事件或会话事件时,才应该创建该文件。Global.asax文件中包含的常用事件:

1)Application_Start事件第一个客户首次请求页面时触发。

2)Session_Start事件每个客户首次请求页面时都触发。

3)Session_End事件在关闭应用程序或者每个客户在规定时间内没有提出请求时触发。

4)Application_End事件在关闭应用程序或者最后一个客户在规定时间内没有提出请求时触发。例13-2voidApplication_Start(objectsender,EventArgse){Application["counter"]=0;Application["userCounter"]=0;System.Data.SqlClient.SqlConnectionconn=newSystem.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);System.Data.SqlClient.SqlCommandcommand=newSystem.Data.SqlClient.SqlCommand("select*fromlogincount",conn);System.Data.SqlClient.SqlDataReaderrd=null;conn.Open();rd=command.ExecuteReader();if(rd.Read()){Application["userCounter"]=Convert.ToInt32(rd["count"]);}rd.Close();conn.Close();}voidSession_Start(objectsender,EventArgse){Application.Lock();Application["counter"]=(int)Application["counter"]+1;Application["userCounter"]=(int)Application["userCounter"]+1;

//统计网站登录次数SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);conn.Open();

SqlCommandcommand=newSqlCommand(string.Format("updatelogincountsetcount={0}",(int)Application["userCounter"]),conn);command.ExecuteNonQuery();conn.Close();Application.UnLock(); Session["userName"]="";Session["id"]="";//在线论坛用

Session["zhuti"]="";//在线论坛用

}

voidSession_End(objectsender,EventArgse){Application.Lock();Application["counter"]=(int)Application["counter"]-1;Application.UnLock();}13.3网页的切换与数据传递常用有下面几种切换网页的方法:1)利用链接切换到新网页,比如使用HyperLink控件直接链接到其他网页。2)利用客户端脚本和HTML控件切换到新网页,比如利用客户端脚本的open、ShowModalDialog、ShowModallessDialog以及HTML的IFRAME等。3)使用Response.Redirect方法切换到新的网页。4)使用Server.Transfer方法切换到新的网页。13.3网页的切换与数据传递(续)Response.Redirect和Server.Transfer方法均可以在代码隐藏类中编写代码切换到新的网页,不同点:

Response.Redirect方法不限于.aspx网页,也不限于当前网站。Server.Transfer方法只能切换到同一个应用程序

.aspx网页。Response.Redirect方法切换到新网页之后,浏览器的地址栏将显示新的网址,Server.Transfer方法切换到新的网页后,浏览器的地址栏仍然显示原来的地址,相对来说保密性好一些。Response.Redirect方法只适用于传递小于2KB的参数数据。Server.Transfer方法则可以传递超过2KB的参数信息。13.3网页的切换与数据传递(续)网页间传递数据的方法常用有:

使用QueryString传递数据,例13-3

利用Session对象传递或共享数据,13-4

利用PreviousPage属性获取数据,13-5使用QueryString传递数据

在切换到另一个网页时直接在网页的ULR后加传递的参数,第一个参数前用“?”和网页名分隔,有多个参数时,各参数之间用“&”分隔,每个参数的形式为“变量名=值”。而在另一个网页中使用

Request.QueryString[stringName]

接收传递的参数。

如果传递的参数中包含汉字、?、&

等特殊符号,则需要在传递时进行Url编码,例如:

Server.Transfer(string.Format("test.aspx?name={0}&pwd={1}",

Server.UrlEncode(TextBoxName.Text),

Server.UrlEncode(TextBoxPwd.Text)));使用QueryString传递数据接收传递的参数时,再进行Url解码,例如:protectedvoidPage_Load(objectsender,System.EventArgse){

Response.Write("姓名:"+Server.UrlDecode(Request.QueryString["name"]));stringstr="";Response.Write(str.PadRight(5,'\u3000')+"密码:"+Server.UrlDecode(Request.QueryString["pwd"])+"<br/>");

Response.Write("您好,欢迎您登录本网站!");}利用Session对象传递或共享数据由于每个用户都可以有自己的Session,而创建的Session对象所拥有的,并不局限于某一个网页,所以可以使用Session对象传递数据。注意:使用Session会占用服务器的内存资源,并且所有信息将一直存储在内存中直到Session过期。所以与直接向下页传递信息相比,使用Session传值时系统开销较大。利用PreviousPage属性获取数据位于同一个应用程序中的两个ASP.NET网页,其中一个网页可以使用页面的PreviousPage属性来获取另一个网页中的公共属性或是控件值。

在使用前必须在本网页的源代码中添加代码:

<%@PreviousPageType

VirtualPath="~/SourcePage.aspx"%>

意思是指出本网页的前一个网页是哪个网页。利用PreviousPage属性获取数据(续)【例13-5】利用PreviousPage属性获取前一网页的公共属性。

(1)在login.aspx.cs的login类中添加属性。publicstringUsername{get{returnTextBoxName.Text;}}(2)修改ButtonLogin的Click事件代码如下:protectedvoidButtonLogin_Click(objectsender,EventArgse){

Server.Transfer("test.aspx");}利用PreviousPage属性获取数据(续)

(3)切换到test.aspx的【源】视图,在第2行添加:<%@PreviousPageType

VirtualPath="~/login.aspx"%>

(4)修改test.aspx的Page_load代码如下:protectedvoidPage_Load(objectsender,EventArgse){

Response.Write("姓名:"+(string)PreviousPage.Username));}也可以使用PreviousPage.FindControl获取前一个网页中的控件值。例如在test.aspx页面中添加一个Label1控件,显示login.aspx页面中的TextBoxName控件的值,则只需要修改test.aspx的Page_load中的代码为如下代码:利用PreviousPage属性获取数据(续)if(Page.PreviousPage!=null){

TextBox

SourceTextBox=(TextBox)Page.PreviousPage.FindControl("TextBoxName");if(SourceTextBox!=null){Label1.Text=SourceTextBox.Text;}}protectedvoidButtonLogin_Click(objectsender,EventArgse){//例13-3//Server.Transfer(string.Format("test.aspx?name={0}&pwd={1}",Server.UrlEncode(TextBoxName.Text),Server.UrlEncode(TextBoxPwd.Text)));//例13-4/*Session["name"]=TextBoxName.Text;Session["pwd"]=TextBoxPwd.Text;Response.Redirect("test.aspx");*///例13-5//Server.Transfer("test.aspx");stringname=TextBoxName.Text;stringpwd=TextBoxPwd.Text;if(name.IndexOf("'")>-1||name.IndexOf('')>-1||name.IndexOf('"')>-1||pwd.IndexOf("'")>-1||pwd.IndexOf('')>-1||pwd.IndexOf('"')>-1){LabelState.Text="用户名或密码包含有非法字符!";return;}

//数据库连接,实现用户身份认证SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);SqlCommandcommand=newSqlCommand("SelectUser",conn);

command.CommandType=CommandType.StoredProcedure;SqlParameterUserName=command.Parameters.Add("@name",SqlDbType.NVarChar,30);UserName.Value=TextBoxName.Text;SqlParameterUserPwd=command.Parameters.Add("@pwd",SqlDbType.VarChar,20);UserPwd.Value=TextBoxPwd.Text;conn.Open();try{SqlDataReaderdr=command.ExecuteReader();

if(dr.Read()==true){Session["userName"]=name;LabelState.Text="用户"+name+"登录成功。";Server.Transfer("index.aspx");}else{Session["userName"]="";LabelState.Text="登录失败,无此用户名或密码不正确!";}dr.Close();}catch(Exceptionerr){LabelState.Text="系统错误:"+err.Message;}conn.Close();}publicstringUsername{get{returnTextBoxName.Text;}}publicstringUserpwd{get{returnTextBoxPwd.Text;}}protectedvoidButtonRegister_Click(objectsender,EventArgse){Server.Transfer("register.aspx");//注意,网站内须添加Web窗体register.aspx用于用户注册。

}protectedvoidPage_Load(objectsender,EventArgse){

//例13-3/*Response.Write("姓名:"+Request.QueryString[Server.UrlDecode("name")]);stringstr="";//str.PadRight(5,'\u3000')的功能为在str的右边填充全角空格使其长度为5Response.Write(str.PadRight(5,'\u3000')+"密码:"+Request.QueryString["pwd"]+"<br/>");Response.Write("您好,欢迎您登录本网站!");*///例13-4/*//+"".PadRight(3,'\u3000')的含义是添加3个全角空格

Response.Write("姓名:"+Session["name"].ToString()+"".PadRight(3,'\u3000'));Response.Write("密码:"+Session["pwd"].ToString()+"<br/>");Response.Write("您好,欢迎您登录本网站!");*///例13-5/*Response.Write("姓名:"+(string)PreviousPage.Username+"".PadRight(3,'\u3000'));Response.Write("密码:"+(string)PreviousPage.Userpwd+"<br/>");Response.Write("您好,欢迎您登录本网站!");*///读取前一网页控件的值

/*if(Page.PreviousPage!=null){TextBoxSourceTextBox=(TextBox)Page.PreviousPage.FindControl("TextBoxName");if(SourceTextBox!=null){Label1.Text=SourceTextBox.Text;}}*/}13.4在Web.Config中保存配置为了提高扩展性和灵活性,ASP.NET专门设置一个Web.Config文件来保存配置信息。Web.Config不一定要放在Web应用程序的根目录下。同一个Web应用程序下的所有子目录都可以拥有自己的Web.Config文件。此时IIS会先继承根目录下的配置设置,如果碰到相同的配置标记,则现行目录下的Web.Config配置将覆盖根目录下同名的配置设置。Web.Config中包含许多配置节,这些节有些是通用的,另外也允许开发者自定义所需要的节,并加上特定的节标记。protectedvoidButtonOk_Click(objectsender,EventArgse){//新用户注册代码SqlConnectionconn=newSqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["webdevelopConnectionString"].ConnectionString);SqlCommandcommand=newSqlCommand("CheckUser",conn);command.CommandType=CommandType.StoredProcedure;SqlParameterUserName=command.Parameters.Add("@name",SqlDbType.NVarChar,30);UserName.Value=TextBoxName.Text;conn.Open();SqlDataReaderdr=command.ExecuteReader();if(dr.Read()){dr.Close();conn.Close();

温馨提示

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

评论

0/150

提交评论