常用第三方工具与控件本章目标会使用验证码控件制作验证码会使用FreeTextBox控件录入富文本能使用CodeSmith生成实体类代码第三方控件微软提供的控件不够丰富偶尔效果不理想(比如日历)第三方控件简单方便大部分可以免费下载有使用说明拿来主义验证码百度注册的页面为什么需要验证码?防止不法分子通过穷举方式破解密码、盗取钱财。防止竞争对手通过大量注册,破坏网站的稳定。验证码验证方式基于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开发中,哪些地方需要验证码?HTML的录入第三波网络书店的图书目录中,要显示下面一部分内容:实际上,该部分的内容是STRONG第Ⅰ部分CLR基础/STRONGBR第1章CLR的执行模型BR就是说,我们在录入目录信息时,需要编写HTML代码才能达到所需的效果。能不能像Word那样编辑带格式的内容呢?在线文本编辑器在线文本编辑器解决了HTML格式录入的问题常用的在线文本编辑器RichTextBox,最早的富文本控件,富文本控件因它而得名;FCKeditor,是国外一个开源的项目;CuteEditor,功能最为完善,但它自身也是相当庞大的;eWebEditor,国产软件,有中国特色;FreeTextBox,简单方便,国内使用相当普遍。FreeTextBox演示FreeTextBox的使用将FreeTextBox添加入工具栏将FreeTextBox控件放入图书的编辑和添加模板中设置相关ObjectDataSource参数查看运行效果演示示例:图书目录的编辑录入编码回顾回顾网上书店开发过程模型层——把数据库的表变成类数据层——增、查、改、删(CRUT)业务层——调用数据层进行增查改删能否简化减少重复编码,提高开发效率?使用工具生成代码重复进行相似的工作代码生成工具常见代码生成工具CodeSmith国外最著名的商业代码生成器。宣扬快捷开发,支持多种语言代码生成工具常见代码生成工具CodeSmithMyGeneratoe:国外著名免费代码生成器,开源软件。Codematic国内人气最旺的免费代码生成器,基于C#和SQLServer,方便快捷,可自动生成整站代码代码生成工具常见代码生成工具CodeSmithMyGeneratoe:国外著名免费代码生成器,开源软件。CodematicMacrObject国内一款不错的商业代码生成器,基于Nuva(女娲)语言。支持多套模板一次生成代码能够保存数据架构和配置信息应用最广泛初识CodeSmith演示生成Book实体类打开CodeSmithExplorer找到DatabaseSchema中的模板businessobject.cst双击该模板,选择数据表(需要添加数据连接)单击“Generate”(生成)查看生成的代码,并与我们使用的实体类相比较演示示例:实体类的生成实体类生成了,但却不是我们想要的格式CodeSmith的模板模板是代码生成的基础以.cst为后缀名可以使用C#语言编写代码CodeSmith的模板由以下三部分组成静态内容:固定不变的内容(实体类中的“public”等);能够自动生成的内容(当前时间等);动态内容:需要用户指定的内容(参数)。CodeSmith模板入门声明模板属性定义参数%@CodeTemplateLanguage=C#TargetLanguage=C#Description=%%@PropertyName=NumberType=Int32Category=ContextDescription=%编写模板使用的语言确认生成文件类型该参数需输入CodeSmith模板入门基本语法脚本标签scriptrunat=templatepublicstringDrawLine(intnum){stringstr=;for(inti=0;i=num;i++){str+=*;}returnstr;}/script可使用与C#编码一样的方式编写代码CodeSmith模板入门基本语法脚本标签代码标签编写第一个模板,查看生产效果演示:第一个模板%for(inti=Number;i=0;i--)%%{%%=DrawLine(i)%%}%%%标签:可以放置任意数量的代码在其中,但并不能直接输出到模版中。%=%标签:在模版中输出一个字符串CodeSmith模板进阶生成实体类的需求类名:如果表名后面有“s”(如Books),则类名=表名-“s”;否则类名=表名。字段:首字母小写,并依据相应数据库中的类型设置字段类型和默认值。外键:外键字段名=外键对象名+“Id”usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceMyBookShop.Models{[Serializable()]publicclassBook{privateintid;privatestringtitle=String.Empty;privatestringauthor=String.Empty;……privatePublisherpublisher;privateCategorycategory;}}数据库访问组件组件的引用组件的使用ForeignKeyColumns:所有外键列的集合NonForeignKeyColumns:所有非外键列的集合NonKeyColumns:所有既不是主键又不是外键的列的集合%@AssemblyName=SchemaExplorer%%@ImportNamespace=SchemaExplorer%TableSchema//表的类型ColumnSchema//列的类型编写仅包含字段的实体类模板编写模板设置参数为数据表添加模板代码和方法%@PropertyName=SourceTableType=SchemaExplorer.TableSchemaCategory=ContextDescription=ObjectTable.%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的模板之前,需要考虑清楚哪三部分内容?