单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,静态网页设计教程,教学内容,学习情境一:搭建开发环境,学习情境二:系统对象与状态管理,学习情境三:站点导航控件与母版页,学习情境四:搭建系统框架,学习情境五:数据绑定与显示,学习情境六:数据录入与验证,学习情境七:数据更新于编辑,学习情境八:常用第三方工具与控件,学习情境九:用户控件与HTTPHANDLER,学习情境十:网站部署与定制,学习情境一,搭建开发环境,课程地位,Prev,HTML,SQL Base,Logic Java,C#/WinForms,STB,Project1:ADO.Net+WinForms C/S,ADO.Net/Three Tier,JavaScript,SQL Advance,Java OOP,Project2: B/S,.Net/OOP,JSP,Ajax/Web Service,JSP/Servlet/JavaBean/Web Service,Struts/Hibernate/Spring/Ajax,ASP.Net,NTC,Project3: Net/Java HR/CRM/OA/B2C B/S,行业手册,就业技能结构图,本门课程目标,学完本门课程后,你能够:,熟练使用Visual Studio开发环境开发ASP.NET应用程序,完成常见的数据操作任务,运用ASP.NET开发商业站点,课程工程展示,网上书店演示,图书列表,数字水印,课程工程展示,RSS发布新书列表,预习检查,创立 ASP.NET页面时,自动生成了哪几个文件?,使用ASP.NET做开发,是否一定要安装IIS?,本章任务,初识ASP.NET,制作第一个ASP.NET页面,显示学员信息列表,本章目标,掌握简单 ASP.NET 程序的开发步骤,掌握 ASP.NET控件+事件的开发方式,会使用Label、TextBox、Button等简单的控件,B/S概念回忆,B/S 与 C/S 相比各有何优缺点?,B/S 的典型应用场景有哪些?,ASP.NET的特色与优势4-1,与浏览器无关,方便设置断点,易于调试,编译后执行,运行效率高,丰富的控件库,代码后置,逻辑清楚,ASP.NET的特色与优势4-2,编译后执行,运行效率高,_,_,_,_,代码,编译,Microsoft,中间语言,MSIL 或 IL,JIT 编译器,机器语言,分别编译 IL 的每一局部,ASP.NET的特色与优势4-3,丰富的控件库,内置80多种控件,统计说明,采用新控件方式的编码,至少比早期减少70%的代码量,使用纯 JavaScript 脚本方式编写树形目录需要大量编码,而使用TreeView导航控件,无需编写一行代码即可完成,ASP.NET的特色与优势4-4,代码后置,将业务逻辑代码与显示逻辑分开,ASPX,页面,页面显示,.aspx页面,业务逻辑,.cs文件,程序员,页面设计人员,成功案例5-1,因为 ASP.NET 具有诸多优势,越来越多的企业开始采用ASP.NET技术构建它们的网络应用系统。,戴尔电脑,当当书店,中华英才网,微软官方网站,. .,ASP.NET成功案例5-2,1.ap.dell /content/default.aspx,戴尔公司官方网站,网站是戴尔电脑直销的最主要渠道之一,每天有上千订单通过戴尔网站提交和处理,ASP.NET成功案例5-3,:/default.aspx,当当网,全球最大的中文网上书店,提供近百万种商品的在线销售,ASP.NET成功案例5-4,:/index.aspx,中华英才网,网站日均浏览量超过1900万,拥有超过1360万个人注册用户,拥有超过1250万份有效简历,累计超过140万家企业注册会员,每天提供超过160万个有效职位,ASP.NET成功案例5-5,:/default.aspx,微软公司官方网站,小结,列举2-3条ASP.NET的特色和优势。,为什么说ASP.NET应用程序运行效率高?,搭建开发环境,安装IIS并配置虚拟目录,IIS 是基于 Windows系统的Web 效劳器的,ASP.NET应用程序的发布是基于IIS效劳器的,IIS类似JSP中使用的Tomcat,提供了更为强大的功能,视频:,IIS安装和配置视频,本卷须知,单击“添加/删除Windows组件,确保“应用程序效劳器处于选中状态,开发效劳器,在VS中,内置了轻量级的Web效劳器,Cassini,无须配置IIS、设置相应权限,Cassini运行时在状态栏的显示,可以查看开发效劳器的状态信息,第一个ASP.NET应用程序,时间提示页面,在Visual Studio中新建一个网站,设置站点位置,拖入相关控件,编写事件处理方法,查看运行效果,演示例如:第一个ASP.NET应用程序,工程位置设置,新建网站时,可选择工程的位置,有多种选择,点击浏览可以更改工程位置,可视化的设计,双击Botton控件,到代码页,可以编写代码,与WinForms编程类似,点击“源可看到HTML视图,与WinForms一样简单的控件+事件方式,基于控件+事件的编程,protected void btnOK_Click(object sender, EventArgs e),string greeting;,switch(DateTime.Now.Hour),. .,case 12:,greeting = ,嘿,,0,同学,吃中午饭了!,;,break;,. .,string message = string.Format(greeting, txtName.Text.Trim( );,lblMessage.Text = message;,Botton单击事件方法,通过Text属性直接获取控件值,无须像jsp中使用Get、Post等方式,查看解决方案组成,这是我们刚刚页面的解决方案组成,存放数据的文件夹,自动创立的窗体文件,代码后置文件,站点配置文件,ASP.NET中,HTML代码和C#代码分别存储于不同的文件中,称作代码后置,编码方式,ASP.NET有两种编码方式:代码内嵌和代码后置,代码内嵌,HTML代码和C#代码交叉使用。,演示例如:代码内嵌展示,内嵌方式只有.aspx文件,体会ASP.NET的开发过程,显示学员信息,创立ShowStudents.aspx页面。,将学员信息表拖入页面,设置显示字段和标头,设置自动套用格式,添加分页功能,设置每页显示10条信息,演示例如2:学员信息列表,关键步骤:将表拖入页面,拖入表时,自动出现相关信息,使用效劳器资源管理器,翻开学员信息数据库,将Student表拖入页面的设计窗口内,关键步骤:设置字段和标题,设置Columns,可编辑显示字段,HeaderText设置列标题显示的内容,关键步骤:套用风格,选择自动套用格式,多种格式可选,关键步骤:设置分页,AllowPaging置为True翻开分页功能,PageSize属性设置每页的显示数目,小结,在后置代码中获取用户在TextBox中输入的内容,使用的是哪个属性?,什么是代码后置?,设置每页显示的条数,使用了哪个属性?,总结,ASP.NET的优势有哪些?,画图描述ASP.NET工作原理。,建立一个ASP.NET工程有哪些步骤?,ASP.NET代码开发有哪两种模式?,学习情境二,系统对象与状态管理,回忆,什么是代码后置?,JSP,中状态保持有哪几种方式?,JSP,中,Session,的写法,预习检查,Session,有什么用处?,.,aspx,页面继承自哪个类?,本章任务,实现用户登录功能,实现对用户浏览器的判断,实现页面数据的传递,本章目标,掌握页面间的数据传递技术,能用Session对象记录用户登录状态等信息,能使用Server对象查看客户端浏览器类型,会使用,Response,对象和,Request,对象控制页面的输入输出,运行机制,回忆JSP的运行机制,客户端请求,后台处理类Servlet,返回客户端HTML,ASP.NET的运行机制是什么呢?,ASP.NET运行机制,.aspx,文件,第一次请求,解析,后台编码类,生成,生成的,页面类,编译,第二次请求,第二个请求,实例化,响应,ASP.NET,引擎,页面类,实例化,处理和显示,现象:第一次获取网页较慢,第二次获取较快,系统对象,JSP和ASP.NET中的常见系统对象比照。,系统对象,JSP,ASP.NET,Page对象,指向页面自身的方式。作用域为页面执行期。,Request对象,读取客户端在Web请求期间发送的值,Response 对象,封装了页面执行期返回到HTTP客户端的输出,Application对象,作用于整个程序运行期的状态对象,Session 对象,会话期状态保持对象,用于跟踪单一用户的会话。,Cookie 对象,客户端保持会话信息的一种方式,Server 对象,无,但其他对象提供了相应方法,提供对服务器上的方法和属性的访问,注意:JSP和ASP.NET中对象的大小写不同,Page对象,每个.aspx文件对应一个Page对象,.aspx与后台代码类局部类合并生成页面类,Page对象是页面类的实例,所有的.aspx文件Web窗体页都继承自类,演示:新建页面,查看源视图,Page指令,指明页面代码和后置代码所使用的脚本语言,设置是否自动调用网页事件 ,默认为true,指定代码后置文件,该文件包含此页面的局部类,代码后置的类,局部类, Page指令定义了 ASP.NET 页用于编译和解析的属性。,每个aspx页面只能有一个Page指令,页面输入输出控制,Request对象,获得页面输入,URL传参,Form表单提交,Response 对象,在页面输出要显示的内容,重定向,Request对象,结合JSP,列举页面间传递数据的几种方式?,如何获取传递过来的数据呢?,Request,对象,ServerVariables 属性,Form,属性,Params 属性,QueryString,属性,获取通过URL路径传来的数据,获取通过表单提交传输的数据,获取Web效劳器变量的集合,以上三种方式传输的内容都可以使用该属性获取,Response 对象,Response 对象允许开发人员对当前页面的输出流进行操作,Response.对象,Redirect方法,Write方法,Response.Write(,Hello,ACCP);,直接在页面上输出内容,重定向到另外一个页面,Response.Redirect( :/ 163 );,综合例如,获取并打印浏览器的信息,输出浏览器类型IE/FireFox,输出相关版本信息,输出客户端语言信息,Request.ServerVariablesHTTP_USER_AGENT;,/获取,浏览器及版本,Request.ServerVariablesHTTP_ACCEPT_LANGUAGE;,/获取,浏览器语言,演示例如5:获取并打印浏览器信息,数据传递,JSP页面中,如何获取用户输入的信息?,分两个页面进行处理,用户输入页面是一页,处理用户输入的又是另一个页面。,提交给同一页面,通过特殊参数判断是回传的数据,通过Get、Post方式或者URL传递需要发送效劳器的数据,页内数据传递,回发,ASP.NET,Web页面,控件1,控件1,用户页面,操作,Page.IsPostBack属性,回传,首次加载,true,false,如何判断回发和首次加载?,演示例如1:查询演示,关键代码:验证回传,IsPostBack常放置于Page_Load方法中,用于首次加载页面时的初始化,protected void Page_Load(object sender, EventArgs e),if (Page.IsPostBack),. .,跨页数据传递,ASP.NET,Web页面1,ASP.NET,Web页面2,控件1,控件2 ,跨,页,传,递,如何知道跨页发送,并获取传过来的数据?,跨页数据传递,IsCrossPagePostBack,指示跨页回发是否包含该页,PreviousPage,获取向当前页面传输数据的页面,PreviousPage,属性,页面2,FindControl,方法,找到页面1的对象,根据控件名,获得控件对象,演示例如2:跨页数据传递,关键代码,发出提交的页面,获取内容的页面,if (Page.PreviousPage!=null),if(,PreviousPage.IsCrossPagePostBack,= true),this.lblShowURL.Text = ,您的查询条件为:, +,(TextBox)this.PreviousPage.FindControl(txtKeyWord).,Text;,通过PostBackUrl指定获取页,获取控件值,判断该页面的是否为其他页回传,小结,绘图描述ASP.NET中页面的编译过程。,.aspx文件都继承自哪个类?,中,.aspx的类与对应的代码后置的类是什么关系?,ASP.NET中,页内数据传递使用哪个属性判断回传或者首次加载?,状态管理,JSP中状态保持有哪几种方式?,session、cookie等,ASP.NET中状态保持,ASP.NET,状态保持,Session,Cookie,Application,存储于效劳器,存储于客户端,应用程序级别的状态保持,Session,Session用于什么场合?,结合JSP中学过的知识,我们知道,Session保持当前用户状态信息,常用于用户登录、购物车等,Session例如,第三波网上书店用户登录。,用户输入用户名和密码,检测用户名和密码是否输入合法,登录成功时,在Session中保存用户对象。,演示例如3:第三波网上书店的登录,关键代码,登录代码,索引器,使用索引器 ,可以像数组一样处理Session对象,User user = new User();,user.Id = 0;,user.UserName = txtloginId.Text;,user.PassWord = txtLoginPwd.Text;,SessionUser = user;,Session的名称,要存储的对象,JSP中session.setAttribute(username,username),Cookie演示,Cookie方式记录用户最后登录时间,当用户登录时,记录用户的登录时间,用户下次登录时,显示用户上次登录时间,演示例如4:增加Cookie的书店登录,关键代码,写入Cookie代码,读取Cookie代码,HttpCookie,hcCookie,= new,HttpCookie(,UserName,“,张三,);,Response.,Cookies.Add,(,hcCookie,);,string UserName=,Request.CookiesUserName,.Value,;,添加新的Cookie,Application对象,Application对象可以存储应用程序级的数据。,“Application:应用程序,第一个用户访问站点时,应用程序启动,并创立一个Application对象。,创立成功后,整个应用程序中都可以使用该对象。,除非应用程序关闭,否那么对象一直存储在内存中。,Application对象对应HttpApplication类,它定义 ASP.NET,应用程序中的所有应用程序对象通用的方法、属性和事件。,小结,请分别书写Session方式和Cookie方式保存用户登录状态的代码。,保存当前用户登录时间,保存登录用户名,编写读取Cookie中内容的代码,Server 对象,Server对象是HttpServerUtility的一个实例,它提供对效劳器上的方法和属性的访问。,Server,对象,HtmlEncode方法和,HtmlDecode方法,Execute,方法和,Transfer,方法,UrlEncode方法和,UrlDecode方法,MapPath,方法,取得文件的物理路径,执行另一个页面的脚本,将文本编码成可以在浏览器中可正确浏览的格式,URL编码和解码,类似与JSP中的URLEncoder.encode,综合例如,修改欢送页,当用户未登录时转到登录页面,登录成功后转回欢送页,在欢送页面显示用户的信息,根据用户浏览器的语言,给予不同语言的欢送辞如:中文用“您好, !,其他用“HELLO, .!。,演示例如6:新的欢送页面,总结,如果要显示在线人数,想想怎么做?,提示:在每次用户请求时记录人数,保存在什么位置比较适宜?,简述ASP.NET中状态保持的三种方式,并说明适用范围?,学习情境四,搭建系统框架,回忆2-1,三层结构都有哪三层?,上一章里我们学习了哪三种导航控件?,回忆2-2,string sql = SELECT SubjectName FROM Subject;,SqlCommand command = new SqlCommand(sql, DBHelper.connection);,DBHelper.connection.Open();,SqlDataReader dataReader = command.ExecuteReader();,while (dataReader.Read( ),cboSubject.Items.Add(dataReaderSubjectName.ToString();,未关闭 Reader,dataReader.Close();,未关闭连接,DBHelper.connection,.Close();,DBHelper.connection,.Dispose();,预习检查,模型层有哪些内容?,数据访问层一般写哪些方法?,本章任务,搭建网上书店的架构,实现书店的用户登录,本章目标,会在 ASP.NET 中使用三层结构。,能够实现三层结构下的用户注册和登录。,系统架构,三层结构,表示层,业务逻辑层,数据访问层,分层的理念:将相似的内容放到一起去处理,开发人员可以只关注整个结构中的其中某一层,可以很容易的用新的实现来替换原有层次的实现,三层结构的经典案例:PetShop,PetShop4.0,宠物商店,微软展示.NET企业开发的范例。,与Sun的PetStore的商业竞争。,一个小型的电子商务案例。,表达了微软推广的开发思想和设计理念。,分22个工程,经典的系统,从设计的思想到最好的编码,学习参考价值很高。,演示:PetShop4.0,PetShop4.0架构简介,ASP.NET Web,BLL,DALFactory,OracleDAL,SQLServerDAL,IDAL,Model,表示层,业务层,数据层,典型的三层结构,搭建第三波网络书店的模型层,模型层,表示层需要访问实体对象的属性值。,业务层需要通过实体对象处理业务逻辑。,数据层也需要通过实体对象读写数据库。,模型是数据载体。,命名,工程名:MyBookShopModels,命名空间:MyBookShop.Models,类名:图书表Books图书类Book,实体类通常冠以Serializable特性,以保证实体传输的可靠性,外键的处理,数据库中有主外键关系,模型层怎么表示?,比方用户表和状态表。,状态字段是用户表的外键。,两种方式:,为实体类添加状态id属性,存储状态id。,为实体类添加状态属性,存储状态对象。,例如,用户类的模型,用户需要有登录名、密码、状态等属性,状态表存储状态名称,用户的状态属性使用状态对象,public UserState UserState,get ,return this.userState;,set ,this.userState = value;,处理外键的代码,Serializable(),public class User,/字段,public User() /构造函数,/常见属性,public UserState UserState/用户状态-外键,get return this.userState; ,set this.userState = value; ,小结,编写实体类UserRole并更新User类相关属性,类关系图如下,答案:,UserRole类,数据访问层,数据访问层,所有与数据库交互的操作,数据表的增、删、查、改操作,数据访问层不做逻辑判断,命名,工程名:MyBookShopDAL,命名空间:MyBookShop.DAL,类名:图书表Books图书数据访问类BookService,代码比较,比较两段代码 代码1 代码2,在每一个对象的数据库访问类中:,数据库连接反复出现,数据库连接翻开和关闭反复出现,执行Sql语句的方法相似,返回记录集的方法相似,根据面向对象思想,是否可以减少这些重复劳动?,DBHelper类,我们将常用方法提取出来,作为,DBHelper,类,该类包含了:,建立数据库连接,执行Sql的方法,存储过程sql语句,返回记录集,返回Reader,返回结果,创立数据访问层的类,创立UserService类,Create方法,Retrieve方法,Update方法,Delete方法,bool AddUser(User user),IList GetAllUsers( ),User GetUserById(int id),IList GetUsersBySql(string sql),bool DeleteUserById(int id),bool UpdateUser(User user),增加一个用户的方法,public static bool AddUser(User user),string sql =,INSERT USERS (loginid, loginpwd, name, address, phone, mail, userroleId,UserStateId) +,VALUES (LoginId,LoginPwd,Name,Address,Phone,Mail, RoleId,UserStateId);,SqlParameter para = new SqlParameter ,new SqlParameter(LoginId,user.LoginId),;,DBHelper.ExecuteCommand(sql, para);,return true;,组合SQL语句,参数赋值,调用DBHelper类中的方法进行处理,小结,模型层为什么要标记为可序列化?,模型层的作用?,数据访问层的功能?,编写User的数据访问类的查、改、删方法。,例如:User的数据库访问类,业务逻辑层,业务逻辑层,是表示层与数据访问层的桥梁,,负责逻辑的判断,业务处理、数据传递。,不在表示层访问数据库,数据更加平安。,命名,工程名:MyBookShopBLL,命名空间:MyBookShop.BLL,类名:图书表Books图书业务逻辑层类BookManager,用户登录的业务逻辑方法,public static bool Login(string loginId, string loginPwd, out User validUser),User user = UserService.GetUserByLoginId(loginId);,if (user = null),validUser = null;,return false;,if (user.LoginPwd = loginPwd),validUser = user;,return true;,else,validUser = null; /密码错误,return false;,表示层,表示层的设计给客户最直接的体验。,页面风格和布局,美观大方。,页面操作符合逻辑,讲究用户体验 。,注意风格统一。,表示层负责内容的展现和与用户的交互。,可以进行变量范围的验证。,不做业务逻辑判断。,不做与数据库交互的处理。,用户管理模块,首先根据数据库创立模型层。,包括用户的实体类以及相关联的类。,创立数据访问层用户管理类。,包括增删查改方法。,设计相关页面,并编写事件代码。,新用户注册。,用户登录。,用户信息修改。,创立业务逻辑层处理类。,根据需要,添加相关方法。,例如1,用户登录,创立页面。,编写事件处理代码,包括验证输入。,创立业务逻辑层方法,调用数据访问层相关方法处理。,演示例如:用户登录,用户注册确实认事件代码,User user = new User();,user.LoginId = this.txtLoginId.Text;,user.UserState = new UserState();,user.UserState.Id = 1;,if (UserManager.AddUser(user),this.ltMain.Text = alert(,注册成功!请继续购物,);,window.location=./default.aspx;,else,this.ltMain.Text = alert(,用户名已使用!请重新选择!,);,实例化User类,对类相关属性进行赋值,默认值,硬编码,业务层进行相关判断和处理,弹出脚本提示,小技巧:在控件上输出脚本,小结,编写图书模块相关实体类和数据层、业务层的类。,图书有id、作者、标题、分类、出版社、描述、ISBN简化。,出版社有id、名称。,分类有id、名称。,编写图书、出版社、分类的实体类。,编写图书的数据层增删查改方法。,编写图书业务层的查询所有的方法。,演示例如:图书模块相关类,总结,数据访问层常见的方法有哪几种?,页面要显示一个表的内容,可否直接使用ADO.NET连接数据库,为什么?,业务逻辑层的方法来自哪局部的需求?,学习情境五,数据绑定与显示,回忆2-1,TreeView控件绑定数据的方式是什么?,指定,DataSourceID,数据访问层有哪四类常见方法?,C,、,R,、,U,、,D,在ASP.NET中调用客户端脚本,,有哪几种方法?,注册客户端脚本,页面输出脚本,控件的,Text,中输出脚本,下面是注册用户的局部代码,检查有什么问题。,回忆2-2,User user = new User( );,user.LoginId = this.txtLoginId.Text;,user.LoginPwd = this.txtLoginPwd.Text;,if (UserManager.LoginIdExists(user.LoginId),this.Page.ClientScript.RegisterStartupScript(this.GetType( ), , alert(,用户名或者密码错误!,););,UserManager.AddUser(user);,此处应该使用单引号,预习检查,GridView,控件有哪两种数据绑定方式?,有哪几种数据源控件?,本章任务,完成书籍分类维护模块,图书列表分页,可多项选择,实现多个图书分类的调整,高亮显示鼠标所在行光棒效果,图书详细显示页面,本章目标,能熟练使用GridView进行数据的查询与展示,熟练使用ObjectDataSource控件绑定业务逻辑层返回的对象,数据展示,数据展示的两种实现方法,使用数据源控件,可以实现快速开发,手写,代码实现,简单,设置实现,ADO.NET,数据,源控件,Web效劳器,数据库,展示数据,什么是数据源控件?,数据源控件,快速实现多种常用的数据源进行展示和交互,快速完成对数据表增删改查操作,是引入的一个新的数据抽象层,学习过的,数据源控件,“面包屑导航控件使用的,SiteMapDataSource,TreeView导航控件使用的,XmlDataSource,数据源控件,VS2005内置的五种数据源控件,SqlDataSource,AccessDataSource,ObjectDataSource,XmlDataSource,SiteMapDataSource,SqlDataSource允许访问支持,ADO.NET数据提供程序的所有,数据源。可访问ODBC、,SQL Server等,ObjectDataSource可以,对业务对象或其他返回数据,的类执行特定的数据访问,XmlDataSource可以对,XML文档执行特定访问,,包括物理访问和内存访问。,SiteMapDataSource可以对站点地图,提供程序所存储的Web站点执行,特定的站点地图数据访问,数据源控件,数据源控件类的层次结构图:,Control类,普通数据源控件,层次化数据源控件,ObjectDataSource,SqlDataSource,SiteMapDataSource,XMLDataSource,AccessDataSource,所有数据源控件都派生于,Control类,ObjectDataSource重要属性,属性名称,说明,SelectMethod,获取或设置由检索数据的方法或函数的名称。,InsertMethod,获取或设置插入数据的方法或函数的名称。,UpdateMethod,获取或设置由更新数据的方法或函数的名称。,DeleteMethod,获取或设置删除数据的方法或函数的名称。,TypeName,获取或设置 ObjectDataSource 对象表示的类的名称,即业务对象的类名。,手写代码方式,this.gvMain.,DataSource,= UserManager.GetAllUsers( );,this.gvMain.,DataBind( ),;,获取数据的方法,展示数据的控件,指定数据集合,数据绑定方法,注意:,数据源控件方式只要指定数据源id即可;,DataSource方式在指定完数据源后必须使用绑定方法。,数据绑定控件,数据绑定控件可以用来展示和绑定数据,数据源控件不提供展示,数据绑定控件提供展示,数据绑定控件可以通过数据源控件绑定数据,数据绑定控件的层次结构,小结,三层结构下,采用哪个数据源控件比较适宜?,说明五种数据源控件各自的作用。,图书分类管理,第三波网络书店的图书分类管理,图书列表显示,显示标题和分类,分页,详情,多项选择效果,光棒效果,分类修改功能,数据展示,JSP中如何显示列表信息?,读取数据,循环记录集,组合HTML代码使用标签库或者硬编码,.NET中的数据绑定控件,能够将控件绑定到一个数据结果集,能够使用模板自定义控件的布局和样式,提供用于处理和取消事件的方便模型,GridView控件,使用GridView显示图书信息列表,1、将GridView控件拖入页面。,2、添加并指定ObjectDataSource数据源。,3、编辑列,选择需要显示的字段,并可设置表头等。,4、设置分页。,5、运行,查看效果。,演示例如: 图书列表,绑定列,BoundField字段,表示数据绑定控件中作为文本显示的字段。,可设置表头、样式等信息。,DataFormatString,可设置显示字段的格式。,注: 当HtmlCode属性设置为false,,DataFormatString才有效,0:C,0代表对应后面的第一个参数,这里就是绑定的字段所对应的值;,C是格式化标记,它可以将数字型的字段格式化为货币类型。,绑定列,TemplateField字段,绑定中显示自定义内容的字段,有五种模板标头、脚注、普通项、交替项、编辑模式,asp:TextBox ID=TextBox1 runat=server,Text=,asp:Label ID=Label1 runat=server,Text=,绑定字段的方法,还可以使用,Eval,注意单引号的使用,Eval和Bind,Eval方法是只读方法,该方法采用数据字段的值作为参数并将其作为字符串返回。,当对表达式操作时候,必须用Eval 如,格式化,Bind方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。,d:日期;m:月份;y:年份。可能格式化为“17/05/2021。,绑定列,ButtonField字段,显示为数据绑定控件中的按钮,CommandName设置自定义命令RowCommand,protected void gvBooks_RowCommand(),if (e.CommandName = Select),int index = Convert.ToInt32(e.CommandArgument);,GridViewRow selectedRow = gvUser.Rowsindex;,TableCell contactName = selectedRow.Cells1;,绑定列,CommandField,一个特殊字段,显示了用于在数据绑定控件中执行选择、编辑、插入或删除操作的命令按钮,自动生成命令,无须手写,对应数据源的增改查删方法,HyperLinkField,显示为超链接的字段,比方链接到详细页面,设置链接的路径格式,设定绑定的参数集合,绑定列,ImageField字段,为图像的字段,绑定到包含图像 URL 的数据源中的字段,指定,DataImageUrlField,CheckBoxField字段,以复选框显示的布尔型字段,仅当数据源字段中有布尔型字段时使用此字段,光棒效果,protected void,gvDemo_RowDataBound,(object sender, GridViewRowEventArgs e),if (,e.Row.RowType = DataControlRowType.DataRow,),e.(,onmouseover, kgroundColor=#6699ff);,e.(,onmouseout, this.style.backgroundColor=currentcolor);,GridView数据,行绑定事件,判断数据行类型,当鼠标离开时,数据行背景色复原,添加属性客户端:,当鼠标移过的时,数据行背景色变成蓝色,多项选择效果,function GetAllCheckBox(CheckAll),var items = document.getElementsByTagName(input);,for(i=0; iitems.length;i+),if(itemsi.type=checkbox),itemsi.checked = CheckAll.checked;,获得页面上标签,为Input的控件元素,判断控件元素类,型是否为复选框,图书分类管理,完成图书分类管理模块的功能,在页面相应位置放置下拉单 DropDownList ,设置下拉单的数据源,并配置相关属性,绑定数据源,使用ObjectDataSource控件,设置需要显示的字段DataTextField属性,设置值字段DataValueField属性,放置“修改按钮,并编写单击事件的代码,参考答案:,图书分类管理,关键代码,string sb =String.Empty;,for (int i = 0; i this.gvBooks.Rows.Count; i+),CheckBox cb = (gvBooks.Rowsi.FindControl(chbSelect) as CheckBox;,if (cb.Checked = true),sb += (gvBooks.Rowsi.FindControl(lblId) as Label).Text+,;,string catagory = this.;,ChangeCatagory(sb, catagory);/实现更新图书分类的方法,遍历行,找到选中的项,获得下拉单项选择中行的值,详细页面,配合图书列表中的链接项,完成图书的详细页面,显示几个常用的字段,DetailsView控件,使用,DetailsView控件完成图书详细信息的显示,配置数据源,定义数据方法- GetBookById(Int32 id),设置参数获取方法,通过参数获取,指定DetailsView的数据源为该数据源,演示例如:图书的详细页面,小结,默写实现全选效果的javascript脚本,思路:,获得参数多项选择框对象,得到页面上所有的INPUT标签的集合,遍历该集合并将符合条件的对象选中状态改为参数的选中状态,总结,数据源控件有哪几个?,可否使用ObjectDataSource绑定数据访问层返回的DataSet?为什么?,为绑定的行添加脚本领件的方法是什么?,DropDownList控件的哪个属性可获取当前选择的项?,学习情境六,数据录入与验证,回忆2-1,数据展示有哪两种方式?,手写绑定,绑定数据源控件,Eval和Bind的区别?,Eval方法是静态只读方法,格式化显示,计算列等。,Bind方法支持读/写功能,可修改回传效劳器。,下面是改变图书分类的局部代码,有什么问题?,回忆2-2,string sb =String.Empty;,for (int i = 0; i this.gvBooks.Rows.Count; i+),CheckBox cb = (gvBooks.Rows(i).FindControl(chbSelect“) as CheckBox;,if (cb.Checked = true),sb += (gvBooks.Rowsi.FindControl(lblId) as Label).Text+,;,string catagory = this.ddlCatagory.SelectedItem;,ChangeCatagory(sb, catagory);,Rowsi,SelectedValue或 SelectedItem.Value,预习检查,可使用哪个控件完成文件上传?,有哪几种数据验证控件?,本章任务,完善用户注册,完善图书管理模块中的图书信息修改,验证控件,可上传图片,可选择日期,本章目标,能熟练使用验证控件,熟练使用ObjectDataSource更新数据,会手工编写更新事件的方法,有效性验证,用户注册时,输入了不合标准的信息,怎么办?,后台手写验证代码,使用javascript脚本进行验证,ASP.NET提供了验证控件,轻松实现用户输入的验证,且与用户浏览器无关,由在客户端或效劳器中运行的验证代码执行,多种验证控件,验证数据更加简单方便,页面回传,用户体验不好,不平安,与浏览器相关,验证控件的层次结构,BaseValidator,根底验证类,RequiredFieldValidator,CompareValidator,RegularExpressionValidator,RangeValidator,CustomValidator,BaseCompareValidator,Label,WebControl,抽象类,具体类,ValidationSummary,RequiredFieldValidator,非空验证,用于验证用户输入是否为空,常与其他控件一起使用,常用属性,属性名称,说明,ControlToValidate,验证的控件id,Text,出错时的提示,ErrorMessage,提交给ValidationSummary的错误提示,当Text为空时,也会显示该错误信息,RequiredFieldValidator演示,演示输入验证,如上页拖入并设置控件属性,按钮事件:在页面显示,信息已提交!,“,在Page_Load及按钮事件中设置断点,以调试模式运行,体会页面验证顺序,将IE设置为禁用脚本,继续验证,this.lblMessage.Text = ,信息已提交!,;,页面并未提交到效劳器执行,验证在客户端进行,演示例如: 验证控件的执行,当IE设置为禁用脚本时,页面发生回传,验证没有发生,Page.IsValid,修改按钮事件:,Page.IsValid指示页面验证是否成功,用于客户端验证失败情况下,更加平安,if (Page.IsValid),this.lblMessage.Text = ,信息已提交!,;,判断页面是否经过验证,CompareValidator,CompareValidator用于比较控件的值,注册时,密码需要输入两次,并且一致,付款时,金额需大于0, ,常用属性,属性名称,说明,ControlToCompare,要进行对比的控件,Type,比较类型设置,不同类型的比较可能会出错,Operator,比较运算符,默认为等于,RangeValidator,RangeValidator用于范围的验证,验证生日小于当前日期,预定卡拉OK一周内, ,常用属性,属性名称,说明,MaximumValue,范围的上界(最大值),MinimumValue,范围的下界(最小值),Type,验证类型(字符串、整型、双精度、日期、货币五种),电子邮件的验证,电子邮件怎么验证?,没有大小可比,没有范围之分,电子邮件的规那么是:,必须包含一个并且只有一个符号“,第一个字符不得是“或者“.,不允许出现“.或者.,结尾不得是字符“或者“.,zhangsan163,可使用正那么表达式,正那么表达式,用某种模式去匹配一类字符串的一个公式,一类字符串: 号码、电子邮件地址 .,模式:规那么,公式:表示规那么的一段文字,匹配:根据表达式去比照验证规那么,例子: “可匹配字符串开始。那么表达式: “正那么 可匹配的以下字符串中的那一种?,正那么表达式,名不正那么言不顺,RegularExpressionValidator,应用正那么表达式作为进行验证的控件。,电子邮件,身份证号,. .,常用属性,ValidationExpression属性:设置要匹配的正那么表达式,CustomValidator,自定义验证,可以手写js脚本进行客户端验证脚本,也可以编写效劳器端的验证事件,或者联合两种方式验证,更平安,常用属性,属性名称,说明,ClientValidationFunction,用于客户端验证的函数,OnServerValidate,服务器端验证的事件方法,ValidationSummary,验证报告控件,该控件并不对窗体的输入进行验证,它可以将验证错误汇总在一处统一显示,显示的内容是其他控件的ErrorMessage,常用属性,ShowMessageBox,指示是否显示弹出的提示消息,ShowSummary,指示是否显示该报告内容,用于显示提示消息的时候,为防止多处提示验证错误信息,可将验证控件的Text属性设置为“ * 号,现场编程,完善用户注册功能,使用验证控件的验证方式,所有输入都不可为空,两次输入密码一致,Email需要格式正确,使用弹出窗口的提示方式,演示例如: 采用验证控件的用户注册,Calendar,日历控件,在Web页面上放置的一个可选日期的日历控件,方便了用户对于日期的输入,日历控件的使用,将控件拖入页面,设置控件相关属性,设置事件,并添加代码,运行检查效果,演示例如: 日历控件的使用,Calendar,日历控件的常用属性和事件,属性方法名称,说明,SelectedDate属性,设置或获取选择的日期,VisibleDate,属性,当前可见的日期(默认显示的月份),TitleFormat,属性,标题格式(“某月”或“某年某月”),SelectionChanged事件,选择某日期后的事件,Calendar (JS版),能否在用户选择日期时,不刷新页面?,JS版的日历控件,美观,页面无刷新,网上可免费下载,一般都提供使用教程,My97DatePicker日历控件,My97DatePicker,比较不错的js版日历控件,同时支持IE和Firefox,界面美观,功能强大,设置方便,目录结构,存放语言的文件夹