您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > aspnet教程详解(9)
练习点评:入库单管理•需求:提供入库单明细的增删改查页面。字段:Id(Guid类型)、类型(可选值:采购入库、盘盈入库、退货入库,值来自于另外一张入库单类型表)、入库日期(默认为当天,ItemCreated,使用JQueryUI的datepicker控件)、单价、数量、金额。所有字段都不能为空,当用户输入单价或者数量之后自动计算金额(金额=单价*数量),考虑折扣因此金额可以不等于数量*单价,用户还可以修改计算以后的金额。如果数量为负值(红单),则此行显示为红色背景。不允许修改、删除。•ListView在2010的Bug。用myid的方法解决。•3.5中插入有问题。练习点评:用户管理•字段:主键、用户名、用户类型(超级用户、系统管理员、用户)、创建日期、密码、是否禁用。密码以MD5值保存。密码不显示、密码不允许管理员修改,管理员创建的时候给初始密码888888(和主键为Guid类型的一样,在Inserting的时候e.Values[Password]=GetMd5(888888)),创建日期默认为当前时间,可以修改。•增加【禁用】当前行按钮,点击【禁用】点击的时候提示是否真的要禁用,如果确实要禁用则将“禁用”字段设置为true。禁用字段显示为红色文字。•字段变为禁用后,行显示【启用】按钮,点击【启用】按钮将“禁用”字段设置为false。•增加重置密码按钮,点击重置密码按钮将用户的密码重置为888888。综合案例:企业网站•母版:上导航(鼠标放到的导航按钮动态变大)、下版权声明•分为前台和后台两块,后台包括管理员管理及各个模块的管理,用户管理自己写。Insert、Update完成后Redirect到列表界面。•新闻:发布日期(JQueryUI的datepicker(net.itcast.cn)控件)、标题、内容。列表要分页(用DataPager)。使用CKEditor做编辑器。在单独的编辑界面编辑新闻。•看新闻功能:页面名ViewNews.aspx,帖子Id通过URL传递过来Id=3。传入参数的错误处理(帖子不存在等)。禁用ViewState。查看列表也要页面分页。•招聘信息:岗位名称、发布日期、截止日期、需求人数、岗位要求。在单独的编辑界面编辑产品。展示页面的分页有页码跳转。•产品展示页面(鼠标高亮显示当前行,点击产品图片在层中动态显示大图。字段:产品名、产品图片、产品类别(干果、果汁、保健品等))。产品类别管理。不同类别分别展示。在单独的编辑界面编辑产品。WebUserControl,传递一个CatId来决定显示不同类型中的数据,在控件的Page_Load中用代码进行数据绑定。•友情链接•后台管理界面左侧是QQTab风格的导航,两组内容、系统,系统下设修改密码、用户管理。后台登陆要验证码(用这个代码)。禁用ViewState•默认情况下ASP.Net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于新闻展示页面不需要交互完全没必要用ViewState•禁用ViewState的方式:–页面整体禁用ViewState:在顶部Page中EnableViewState=False–指定控件禁用ViewState,在控件上EnableViewState=False•页面禁用ViewState以后并没有完全去掉ViewState,只要ViewState不是很大就可以了。如果要求一点儿ViewState都不能有,那么则页面中不能有runat=server的form,如果页面中没有表单元素,把form完全去掉就可以。如果Button等服务端控件没有放到runat=server的form中,那么则是不可用的。缓存(Cache)•如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能。这样无论有多少人访问都只访问一次数据库,数据库压力不变。•缓存是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。比如CPU二级缓存、windows文件读取缓存。•缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据中数据一致,则需要在慢速数据中对应的数据发生变化的时候,清除缓存中相应的数据。•缓存是改进网站性能的第一个手段,就像索引是改进数据库性能的第一个手段一样。ASP.net缓存主要分为:页面缓存、数据源缓存、数据缓存这三种主要类型。页面缓存•给页面添加%@OutputCacheDuration=15VaryByParam=none%标签就可以启用页面缓存,这样整个页面的内容都会被缓存,页面中的ASP.Net代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效,再次生成以后会再缓存15秒,以此类推。在Page_Load处设置断点、修改数据库数据测试。•缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访问和100万次访问对数据库的压力是一样的。•对于看新闻页面来讲,如果如上设置的话,则会缓存在第一个看到的新闻,因为?id=2、?id=3只是页面的不同参数而已,为了能让不同的新闻各自缓存,因此可以设置VaryByParam=id,表示对于不同的id参数进行单独缓存。如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如VaryByParam=id,number。测试。•如果想让任何不同的查询字符串都创建不同的缓存,则设置VaryByParam=*,一般情况下设置“*”就足够。•在WebUserControl中也可以像页面缓存一样设置控件的缓存。数据源缓存•设定ObjectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true。这样每隔CacheDuration指定的时间段才调用SelectMethod指定的方法来执行数据库查询,其他时候都是直接返回缓存的数据。•缓存固定的时间适用于首页、文章列表等访问频繁的页面,对于看贴页面则不适合,假设有100万个帖子,如果每个帖子都是固定缓存1小时的话,假设一小时之内有10万个帖子被看了,那么就要缓存十万个帖子,非常占用内存,因为“百年一看”的“坟帖”偶然被访问一次也缓存一个小时,占用内存。这时候可以采用“滑动窗口(sliding)”策略,比如帖子缓存10分钟,如果10分钟之内又访问了,则缓存的失效时间修改为从被访问这一刻起的10分钟之后,以此类推。这样经常访问的帖子就可以“长期缓存”,而不经常访问的帖子也不会因为偶然访问而长期占用缓存。设置方法,数据源:CacheExpirationPolicy=Sliding。面试可聊。todo:貌似滑动有问题。不是问题,Sliding只是策略,服务器会参考。缓存其他•页面缓存、数据源缓存等内部都是使用HttpRuntime.Cache来实现缓存的,在一些页面缓存、数据源缓存完成不了的特殊的缓存要求中,可以直接调用HttpRuntime.Cache进行缓存。在如鹏网项目中会讲到。•(*)ASP.Net缓存默认是保存在内存中的,还可以配置保存到数据库中。大型网站还会配合使用Memcached等技术。•清除缓存。在缓存还未失效的时候可能需要立即清空缓存,让数据库的修改立即反映到界面中。ASP.Net没有提供现成的方法,可以使用Hack级别的代码,打开。错误页•当页面发生错误的时候,ASP.Net会将错误信息展示出来,这样一来不好看,二来会泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制错误页,发生错误时显示开发人员定制的页面。404页面放点广告也是好的嘛。•配置web.config,配置customErrors区域:–customErrorsmode=OndefaultRedirect=MyErrorPage.aspx–errorstatusCode=403redirect=NoAccess.htm/–errorstatusCode=404redirect=FileNotFound.htm/–/customErrors•mode三个可选值:On:总是显示定制错误页面;Off:不显示定制错误界面,直接显示调用堆栈等异常信息;remoteonly:对于本机的访问显示调用堆栈等异常信息,对于外部用户的显示定制错误页面。一般设置为RemoteOnly,这样发生错误的话,管理员可以在服务器的浏览器中看详细错误信息,普通用户看不到。学习演示的时候mode设置为On,否则看不到定制页。可以在定义错误页中判断Request.UserHostAddress来设置某些ip看到异常信息,可以读取Session如果是管理员则可以看异常信息。错误页2•error子元素设定对于不同的状态码使用不同的错误页,很多网站都把404做一个特殊的错误页。没有单独设置的状态码错误则显示defaultRedirect中指定的页面。•错误页即可以使用htm页面,也可以使用aspx页面。在aspx页面中可以用HttpContext.Current.Server.GetLastError()拿到异常对象。一般不要把异常信息显示给用户,而是使用后面讲的Log4Net等将异常记录到系统日志。如果要在错误页面中拿到异常对象,比如customErrors中设置redirectMode=ResponseRewrite,因为默认是客户端重定向,在错误页面中就拿不到异常对象了。
本文标题:aspnet教程详解(9)
链接地址:https://www.777doc.com/doc-2901934 .html