资源描述
静态网页设计教程学习情境八,常用第三方工具与控件,回顾2-1,简述DataList、GridView、Repeater三个控件各有什么优势?GridView简单方便Repeater不生成冗余代码,效率最高DataList介于两者之间,方便、性能也不错简述使用Repeater的步骤。分解模板页(美工提供的页面)替换标签,并放入Repeater的项模板中绑定数据,下面是图书列表绑定的方法,检查有什么问题。,回顾2-2,privatevoidDatabind()PagedDataSourcepdsBooks=newPagedDataSource();pdsBooks.DataSource=BookManager.GetOrderedSmallBooksByCategoryId(Convert.ToInt32(ViewStatetypeid),(string)ViewStateOrder);pdsBooks.AllowPaging=true;pdsBooks.PageSize=4;lblCurrentPage.Text=第+(pdsBooks.CurrentPageIndex+1).ToString()+页共+pdsBooks.PageCount.ToString()+页;dlBooks.DataSource=pdsBooks;,指定数据源后未使用绑定方法,分页未指定当前页,预习检查,CodeSmith是做什么用的?为什么要使用验证码?使用哪种控件可以完成带格式的文本内容的录入?,本章任务,为用户注册增加验证码图书编辑使用富文本控件(FreeTextBox)使用CodeSmith生成实体类,验证码,可编辑HTML的控件,使用模板生成标准统一的实体类,本章目标,会使用验证码控件制作验证码会使用FreeTextBox控件录入富文本能使用CodeSmith生成实体类代码,第三方控件,微软提供的控件不够丰富偶尔效果不理想(比如日历)第三方控件简单方便大部分可以免费下载有使用说明拿来主义,HTML的录入,第三波网络书店的图书目录中,要显示下面一部分内容:实际上,该部分的内容是,第部分CLR基础第1章CLR的执行模型,就是说,我们在录入目录信息时,需要编写HTML代码才能达到所需的效果。,能不能像Word那样编辑带格式的内容呢?,在线文本编辑器,在线文本编辑器解决了HTML格式录入的问题常用的在线文本编辑器RichTextBox,最早的富文本控件,富文本控件因它而得名;FCKeditor,是国外一个开源的项目;CuteEditor,功能最为完善,但它自身也是相当庞大的;eWebEditor,国产软件,有中国特色;FreeTextBox,简单方便,国内使用相当普遍。,FreeTextBox,演示FreeTextBox的使用将FreeTextBox添加入工具栏将FreeTextBox控件放入图书的编辑和添加模板中设置相关ObjectDataSource参数查看运行效果,演示示例:图书目录的编辑录入,验证码,百度注册的页面为什么需要验证码?防止不法分子通过穷举方式破解密码、盗取钱财。防止竞争对手通过大量注册,破坏网站的稳定。,验证码,验证方式,基于Cookie的验证Js脚本验证,美观方便,无刷新Cookie在客户端,不够安全,且编码复杂基于Session的验证相对安全,仍需要手写编码基于控件的验证使用方便,很少或无须手写编码比较安全,验证码控件,演示Webvalidates的使用方式添加控件到工具栏将控件拖放到注册页面编写注册验证代码,演示示例:使用验证码的注册页面,验证代码,protectedvoidPage_Load(.)if(!this.IsPostBack)snCode.Create();protectedvoidbtnSubmit_Click(.)if(!snCode.CheckSN(this.txtCode.Text).snCode.Create();else.,生成验证码,注意只在首次加载时使用,比较验证码是否正确,返回布尔型结果,小结,简述将第三方控件显示在工具栏的步骤。验证码控件Webvalidates的哪个方法可以生成一个新的验证码?Web开发中,哪些地方需要验证码?,编码回顾,回顾网上书店开发过程模型层把数据库的表变成类数据层增、查、改、删(CRUT)业务层调用数据层进行增查改删能否简化减少重复编码,提高开发效率?,使用工具生成代码,重复进行相似的工作,代码生成工具,常见代码生成工具CodeSmith,国外最著名的商业代码生成器。,宣扬快捷开发,支持多种语言,代码生成工具,常见代码生成工具CodeSmithMyGeneratoe:国外著名免费代码生成器,开源软件。Codematic,国内人气最旺的免费代码生成器,基于C#和SQLServer,方便快捷,可自动生成整站代码,代码生成工具,常见代码生成工具CodeSmithMyGeneratoe:国外著名免费代码生成器,开源软件。CodematicMacrObject,国内一款不错的商业代码生成器,基于Nuva(女娲)语言。支持多套模板一次生成代码能够保存数据架构和配置信息,应用最广泛,初识CodeSmith,演示生成Book实体类打开CodeSmithExplorer找到DatabaseSchema中的模板businessobject.cst双击该模板,选择数据表(需要添加数据连接)单击“Generate”(生成)查看生成的代码,并与我们使用的实体类相比较,演示示例:实体类的生成,实体类生成了,但却不是我们想要的格式,CodeSmith的模板,模板是代码生成的基础以.cst为后缀名可以使用C#语言编写代码CodeSmith的模板由以下三部分组成静态内容:固定不变的内容(实体类中的“public”等);能够自动生成的内容(当前时间等);动态内容:需要用户指定的内容(参数)。,CodeSmith模板入门,声明模板属性定义参数,编写模板使用的语言,确认生成文件类型,该参数需输入,CodeSmith模板入门,基本语法脚本标签,publicstringDrawLine(intnum)stringstr=;for(inti=0;i,可使用与C#编码一样的方式编写代码,CodeSmith模板入门,基本语法脚本标签代码标签编写第一个模板,查看生产效果,演示:第一个模板,=0;i-)%,标签:可以放置任意数量的代码在其中,但并不能直接输出到模版中。,标签:在模版中输出一个字符串,CodeSmith模板进阶,生成实体类的需求类名:如果表名后面有“s”(如Books),则类名=表名-“s”;否则类名=表名。字段:首字母小写,并依据相应数据库中的类型设置字段类型和默认值。外键:外键字段名=外键对象名+“Id”,usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceMyBookShop.ModelsSerializable()publicclassBookprivateintid;privatestringtitle=String.Empty;privatestringauthor=String.Empty;privatePublisherpublisher;privateCategorycategory;,数据库访问组件,组件的引用组件的使用ForeignKeyColumns:所有外键列的集合NonForeignKeyColumns:所有非外键列的集合NonKeyColumns:所有既不是主键又不是外键的列的集合,TableSchema/表的类型ColumnSchema/列的类型,编写仅包含字段的实体类模板,编写模板设置参数为数据表添加模板代码和方法,publicstringGetColumnName(ColumnSchemacolumn)if(column.IsForeignKeyMember)returncolumn.Name.Substring(0,column.Name.Length-2);returncolumn.Name;,针对外键,去掉末尾的“Id”,演示:MyField,设置参数为表格类型,文件名,控制生成的文件名我们的实体类都是以类名.cs作为文件名,要达到这个目的,可以通过重载GetFileName方法实现代码,publicoverridestringGetFileName()returnGetClassName(this.SourceTable)+.cs;,如果不重写该方法,则保存时的文件名以模板名称作为默认文件名,以TargetLanguage指定的类型确定后缀名,综合示例最终的实体类模板,在生成字段的基础上,添加属性的生成。重载GetFileName方法,使默认保存的文件名为“类名.cs”。,演示:MyObject,小结,只能使用C#语法编写模板么?参数声明时,哪个属性标记参数的类型?访问数据库的表,需要引用哪个组件?,总结,验证码有哪几种实现方式?CodeSmith代码生成的核心思想是什么?在生成实体类的模板中,外键的处理应用了我们的哪个规则?编写CodeSmith的模板之前,需要考虑清楚哪三部分内容?,
展开阅读全文