随笔分类 -  ASP.NET

摘要:AOP(Aspect oriented programming)面向切面编程。说成切面不容易理解,代码哪里有切面?又不是三维物体。概念不管,我们从其思想来理解这个名词吧。 AOP的主要思想是把相同、相似的并且零散的逻辑抽离出来,统一处理;这样不仅维护起来方便,也让代码更加关注自己本身,清晰明了。比如我们常见的权限检查、日志记录、异常处理等都是散乱在系统各个地方,比如发表一篇文章的代码:publicvoidPost(Articlearticle){if(currentUserisnull)thrownewAuthException("您还没有登录");elseArticleM 阅读全文
posted @ 2013-08-15 14:47 君之蘭 阅读(6535) 评论(4) 推荐(3) 编辑
摘要:我们开发web系统,用户身份验证是最常见不过的。最简单的办法就是定一个基类,基类里面有判断Cookie或Session是否存在,然后决定是否跳转。今天就利用MVC的特性来一个不一样的验证方式。publicclassCustomAuthorizeAttribute:AuthorizeAttribute{protectedoverrideboolAuthorizeCore(HttpContextBasehttpContext){UserIdentity user=WebUtility.GetIdentity(httpContext);if(user!=null){httpContext.User= 阅读全文
posted @ 2011-10-19 10:05 君之蘭 阅读(1605) 评论(5) 推荐(2) 编辑
摘要:Global.aspx.cspublicstaticvoidRegisterGlobalFilters(GlobalFilterCollectionfilters){filters.Add(newCustomHandlerErrorAttribute());}CustomHandlerErrorAttribute.cspublicclassCustomHandlerErrorAttribute:HandleErrorAttribute{publicoverridevoidOnException(ExceptionContextfilterContext){if(filterContext.Ex 阅读全文
posted @ 2011-10-08 11:42 君之蘭 阅读(1497) 评论(1) 推荐(1) 编辑
摘要:我想朋友们对缓存已经有一个大致的认识了。从一些朋友的评论中,我了解到有些人也是基于理解,对应用来说可能还是有点力不从心。今天我们就实际案例来分析下缓存的具体应用,就拿博客来说吧。先分析下博客的网站的特点:页面简单(结构一致)、多用户、多文章、多评论、访问量大等。页面简单:几乎所有的页面都是头部标题+侧边栏+列表或内容+评论;多用户:每一个博客都是一个用户,所以可以想想每打开一个页面都会去调用博客表的信息;多文章:每一个博客都有多篇文章,用户越多文章就更多,上千万篇文章也很正常;多评论:文章的量已经很大了,评论又怎么会小呢;访问量大:访问量主要看网站是否受欢迎,我们当然是朝着大访问量的目标设计. 阅读全文
posted @ 2011-08-08 17:22 君之蘭 阅读(564) 评论(1) 推荐(0) 编辑
摘要:缓存二字,从字面上分为两块:“缓”与“存”。上节我们提到的缓存原理,其实是在讲的一个“存”字,如何存取。大致回顾下是key对应的hashcode,根据hashcode作为数组下标来存取,因为存在hash冲突,速度虽达不到O(1),但也是非常之快。今天就说下“缓”的策略。 缓,便意味着“暂时”的意思,过一段时间就不再存在或被替换掉了,所以我们要说的其实是缓存的过期策略。在缓存入门篇中,主要提到了Cache类的Insert的方法,其中的几个变化的参数寓意着各种缓存策略,有具体依赖的有按时间的,一一来看。 按过期时间缓存 这种缓存策略最为简单,只要判断当前时间是否超过了指定的过期时间就remove. 阅读全文
posted @ 2011-08-01 14:48 君之蘭 阅读(672) 评论(0) 推荐(0) 编辑
摘要:昨天在群里有个朋友问,如何使用数据库的临时表。问其原因,原来是他想把查询的结果导出excel,但是苦于查询结果是100个里面随机挑出50个,所以他想把查询结果放在临时表里,导出的时候查询临时表。这个方法不是不可取,其实更好的办法就是把查询的结果DataTable,放到缓存里,导出的时候直接使用就行了。然后群里的同学们都纷纷表明如何使用缓存。本次我们就讲下.Net Framework自带的缓存类,这也算是走进缓存使用的大门了。Web开发中,常用的两个缓存对象是HttpContext.Cache和HttpRuntime.Cache,这两个对象的类型都是System.Web.Caching.Cach 阅读全文
posted @ 2011-08-01 14:45 君之蘭 阅读(808) 评论(0) 推荐(1) 编辑
摘要:前面三节讲了控件的构造、呈现和数据绑定,我想该差不多了。本想讲一个自定义控件来终结控件部分,但是我个人不太喜欢控件这些东西,所以也就懒的写相关的内容,抱歉了。虽然我不喜欢使用控件,但我还是喜欢整个WebForm的设计。一个字:“太神了”。前面章节将Page生命周期的时候有朋友评论说内容太少了,今天开始就从来围绕生命周期的话,讲讲相关的内容吧。 IHttpModule是个什么东西呢?对我们Web开发有什么用呢? 先从名字来看他是一个接口,接口就是让人来继承的,我们要用它就得继承他,并实现他的方法。Module的意思是模块、组件的意思。如果说我们实现了这个接口,并配置了web.config,让I. 阅读全文
posted @ 2011-04-11 09:16 君之蘭 阅读(5640) 评论(14) 推荐(9) 编辑
摘要:数据绑定,databind()是多么亲切的方法,我们每天很不能敲上几百遍。但是你有木有想过他是如何实现的?有木有!!!(咆哮体:)今天,我们拿Repeater来说说DataBind那些事儿。如果朋友你有看过我写的模版引擎里Label的初级应用的话,我在最后贴了一个List的Label的实现,其中有点意思的就是模仿Repeater。不过看没看过无所谓的。今天我们看看微软人家正儿八经的Repeater。 一般控件的绑定我们都是在Page_Load事件方法里这么写 if(!IsPostBack) { BindList(); } 而BindList方法就是我们绑定控件用的方法,独立出来的目的是可能多. 阅读全文
posted @ 2011-04-08 09:11 君之蘭 阅读(3652) 评论(3) 推荐(4) 编辑
摘要:我们搞程序的多多少少都了解点算法。总体来讲,算法是什么?算法就是“时间”和“空间”的互换策略。我们常常考究一个算法的时间复杂度或空间复杂度,如果我们有绝对足够的时间或空间,那么算法就不需要了,可惜这种条件是不存在的,只是在某些情况下相对来说我们不用去考虑其中一个。今天我们讨论的“缓存”,自然就是“用空间换时间”的算法。 缓存就是把一些数据暂时存放于某些地方,可能是内存,也有可能硬盘。总之,目的就... 阅读全文
posted @ 2011-04-05 11:43 君之蘭 阅读(10023) 评论(62) 推荐(35) 编辑
摘要:Field的意思是字段,我们在展示一条数据的时候总是要展示具体的某些字段,有时候是一条数据,有时候是个循环。 一条数据的时候很好处理,我们把数据准备好,然后替换相关的[field]标签就行了。当循环输出的时候,其实只需要调用显示一条数据的方法就行了。 Field的标签格式大概是这样:[field:PostTime length=10 dateFormat="yyyy-MM-dd HH:mm"/] 可以看出,Field也有自己的一些属性,就像一个Label一样。 我们在展示Field的时候有时不可能完全按照数据库的字段名来展示,比如 发布时间PostTime字段,我们可能需要 阅读全文
posted @ 2011-03-24 14:19 君之蘭 阅读(2326) 评论(13) 推荐(6) 编辑
摘要:话说上节听的很郁闷,讲的也郁闷,整个系列没有详细的Code,所以都有点懵。其实仔细看之前的几节应该还是能够理解整个思路的。 我在这里再整理一遍: 用户访问URL后 ->根据所有Page的URL规则(urlpattern)获取当前Page,然后再根据page的Template,Find出所有的Label(通过反射),然后遍历这些Label,把得到的数据的Html替换掉Label本身的标签代码。最后整个Template就是要生成的HTML了。 所以我们要明白Label是如何获取工作才能获取数据库的数据的。一个Label可以理解成一个控件,那么控件必然会支持一些属性(Parameter)和一些 阅读全文
posted @ 2010-11-14 19:58 君之蘭 阅读(3711) 评论(14) 推荐(4) 编辑
摘要:紧接上回,说到Parameter和Field了。 在Label初始化的时候,同时也要对ParameterCollection和FiledCollection初始化。在上节有个属性是这样写的ArticleId=Url(articleid),意思是ArticleId 的值是url的query里的articleid的参数的值。而且还有个 DateFormat="yyyy年MM月dd日"。所以可以看出Parameter的多样化,我个人认为Parameter是最难设计的!以至于我现在写博文都心虚,我之前的系统里对Parameter处理的也比较糟糕,有不少hardcode。 我们说下P 阅读全文
posted @ 2010-11-11 23:50 君之蘭 阅读(3912) 评论(8) 推荐(1) 编辑
摘要:上节讲了页面的整个生产流程,大家都期待第三篇,也就是生产的核心内容——Label的替换。说实话,我很有压力啊:)一个人一个实现思路,所以...可能你不能接受。 我的标签分为2种,一种是配置变量标签(就是站点和系统的Config),用 %变量名%表示,在初始化Labels之前是要执行替换的。另外一种就是数据调用的Label咯。看下风格://简单的循环列表{Article:List Top="10" CategoryId="5"} <a href ="/details/[field:FileName/]" target=" 阅读全文
posted @ 2010-11-10 17:54 君之蘭 阅读(4564) 评论(12) 推荐(9) 编辑
摘要:上节我们介绍了下基本的几个类。下面我们来讲下本CMS系统的运行机制。 一个Url请求过来,我们的CMS系统就要对URL进行分析,知道其Domain属于哪个Site,Url符合哪个Page的访问规则,然后再把Page的Template里的Label进行行替换。 如何拦截Url请求呢? 那就是HttpModule。 自定义一个CMSHttpModule:IHttpModule,在config里增加Ht... 阅读全文
posted @ 2010-11-09 16:17 君之蘭 阅读(6142) 评论(17) 推荐(8) 编辑
摘要:写博文写教程性质的内容,大家比较喜欢,具体的项目设计方案关注的人比较少,而且思路也不一定说的清楚,本身写博文就比较辛苦,作者再偷点懒,那基本上就是一篇废文。尽管如此,我还是想写一下我做过的一个项目的模块设计——CMS的模版引擎。呵呵,叫成“引擎”就是夺人眼球而已。其实就是一个标签解释的过程模块。 做过网站的朋友都对CMS很熟悉,有的朋友也接触过N多CMS系统,国内比较流行的有dedeCMS,phpCMS,帝国CMS,KingCMS,PowerEasyCMS等等,他们都有个共同的特点,就是前台的实现是模版标签机制。标签的好处就是可以让非专业开发人员通过特定的标签实现数据调用。一段标签表示一种数. 阅读全文
posted @ 2010-11-09 12:02 君之蘭 阅读(7830) 评论(19) 推荐(15) 编辑
摘要:很久没写了,抱歉,呵呵。上节我们主要讲了Click的流程,这次主要来看HTML输出。 假如让你写一个Button控件类,你如何设计这个类?他应该包含什么内容? OK!此类必须有个输出HTML的方法对吧?Render,还需要所包含的TagName、Value、Id、Name、Type、Class等等我们能想到的的<input>的属性。这些具体的属性在类里设计成属性就行了,还有一些自定义的属性,所以还需要一个AddAttribute方法。那么我们写一下大致的雏形。Code highlighting produced by Actipro CodeHighlighter (freewar 阅读全文
posted @ 2010-11-08 23:15 君之蘭 阅读(3022) 评论(3) 推荐(8) 编辑
摘要:“做.NET不值钱,没有技术含量,拖拖控件就行了。”———— 这类言语我最讨厌了,一点技术含量都没有,不懂.NET就瞎嚷嚷。不管做什么,做好都不容易,你没做过怎么知道没有技术含量呢? 我们既享受控件带来的快捷,也知其原理,甚至可以自己开发控件,你还能说我们没技术含量?! 控件是什么? 是.NET Framework对Html里... 阅读全文
posted @ 2010-10-15 11:46 君之蘭 阅读(5110) 评论(21) 推荐(9) 编辑
摘要:我们都知道网易、搜狐等大型门户都有“通行证”的概念,这个通行证系统就是今天讨论的“单点登录系统”。其主要特征是多个站点一个用户中心,一点登陆后其他也自动登录,注销也是。比如我们在126登录了邮箱,再去163.com就是登陆状态。我这里的实现方案是传统的cookie方案。希望此文对需要的朋友有用,也希望不足之处大家能够提出。SSO的基本功能:·... 阅读全文
posted @ 2010-10-12 15:04 君之蘭 阅读(7168) 评论(12) 推荐(7) 编辑
摘要:其实看到这个标题,我想一些人应该知道我们要谈论.cs类的实际应用。以前我是ASP程序员,那时候用VBS脚本编程,如果要使用其他方法(比如公共的方法)就得include一些function.asp,就像js的运行一样也要先引用其他的js函数。 所以,转到ASP.NET后,我也没在意类这个东西,也不清楚静态和非静态的区别,反正就是实例化后就可以调用其方法就行了,而aspx.cs里面都是写方法的,就是一... 阅读全文
posted @ 2010-09-30 11:33 君之蘭 阅读(1943) 评论(3) 推荐(1) 编辑
摘要:昨天有同学在群里问MVC怎么让后台调用前台的js方法,我给他讲了半天他还是没能理解,我很晕。调用Javascript 不管是论坛还是QQ群里,很多同学都会问一个问题,就是他的后台程序怎么调用前台JS的方法。问这个问题其实不奇怪,奇怪的是很多同学没想到的一点就是B/S到底是怎么工作的?知道工作方式我们还能不会“调用”吗? B/S:Browser / Server,即̶... 阅读全文
posted @ 2010-09-09 09:43 君之蘭 阅读(2327) 评论(3) 推荐(1) 编辑