随笔分类 -  其它 / ASP.NET

传统asp.net传统模式与MVC模式
摘要:回到目录众所周知,自从.net中出现了特性(attribute)之后,代码变得更加简洁,可读性更强了,今天主要说一下Conditional特性,Conditional它主要是约束你的代码段在哪种条件下进行执行,我们今天主要针对DEBUG和TRACE这两个条件约束,它们可以当作是Conditional特性的输入参数,形式如下:1 [Conditional("DEBUG")]2 protected static void LogDebugInfo()3 {4 //在debug模式输出一些调试信息5 Con... 阅读全文
posted @ 2012-06-29 14:29 张占岭 阅读(2920) 评论(1) 推荐(3) 编辑
摘要:回到占占推荐博客索引 本系列文章主要是我在工作中,遇到一些不能主观判断的问题,最后在电脑上去证明我的理解是否正确,这也是题目“将不确定变成确定”的由来。 记得我在上大学时,老师说过一句话:“机器最能证明一切”,这句话现在看来,确实很经典。 将不确定变为确定系列~目录(“机器最能证明一切”) 第一回  阅读全文
posted @ 2012-06-15 23:27 张占岭 阅读(2869) 评论(11) 推荐(6) 编辑
摘要:回到目录概念:一个对象的延迟初始化(也称延迟实例化)意味着该对象的创建将会延迟至第一次使用该对象时。 延迟初始化主要用于提高性能,避免浪费计算,并减少程序内存要求。以下是最常见的方案:有一个对象的创建开销很大时,应用程序可能不会使用它。 例如,假定您在内存中有一个 Customer 对象,该对象的 Orders 属性返回一个 Orders 对象。 初始化 Orders 对象可能需要创建 Orders 对象的一个大数组(Orders[]),并可能需要数据库连接。 如果用户从不访问 Orders 属性,则没有理由使用系统内存或计算周期来创建 Orders 对象。 通过使用 Lazy<Orde 阅读全文
posted @ 2012-06-12 11:38 张占岭 阅读(6066) 评论(12) 推荐(10) 编辑
摘要:webMatrix可以帮助我们以一种非常容易的方式对WEB站点进行部署,不管你是WEB FORM还是MVC,它都可以很好的兼容。它不仅可以管你的WEB请求,设置WEB参数,而且它还能对你的网站数据库进行管,可以说,方便,简单,实用。当然如果与IIS比起来,这IIS Express(WebMatrix工具组中的一个小工具)的功能确实也有很多限制,如对于同一端口,只能有一个WEB站,这与IIS6下建立的网站有区别,当然这归根到底应该是IIS5本身的问题,它只有一个应用程序池,而到了IIS6就没有端口的限制了,因为它与每一个站点都分配一个应用程序池。这也了避免了一些问题,如一个程序池挂了,所有站点都 阅读全文
posted @ 2012-06-10 23:34 张占岭 阅读(2271) 评论(6) 推荐(3) 编辑
摘要:回到占占推荐博客索引我写过的系列文章也不少了,不过“不忘本”这个系列与其它系列不同,它自己并不成章节,每讲与其它讲都没有内在联系,它是我在实际工作中遇到的问题的一个总结,觉得有时,基础知识确实很重要。在这个系列会主要涉及到以下几点:构造函数的使用及原理抽象类主要用在什么地方,为什么微软的托管代码中有很多abstract接口是用来做什么的,是不是应该为每个操作都去定义一个接口,如何利用接口来实现面向对象的多态性枚举类型有什么特点,它在实现开发中怎么使用,为什么可以和值类型直接进行转化结构类型与类有什么区别,难道真正的开发中我们就不用它吗委托与事件的关系,怎么去理解它们简单的谈一个浅拷贝和深拷贝的 阅读全文
posted @ 2012-06-09 23:35 张占岭 阅读(2158) 评论(2) 推荐(2) 编辑
摘要:回到目录C#中有一个修饰符,它叫static,国人把它叫静态化的,它可以去修饰类,方法,属性,事件等元素。在100%的教科书中把static叫做静态的,对于原本就很抽象的编程语言来说,无疑使它更加抽象化了,啥是静态,静止不动?有点意思。先看一个static的应用场合代码片断:一 静态类:它在程序初始化时自动被执行1 public static class ConnectionFactory2 {...}二 静态方法和静态属性:它在类被第一次使用或第一次被实例化时,被执行1 public static string Conn=WebConfig.SQLConn;2 public static . 阅读全文
posted @ 2012-06-09 15:25 张占岭 阅读(1735) 评论(2) 推荐(2) 编辑
摘要:回到目录如果您看到这个题目,觉得有点怪,那说明你是一个高人,最起码比我高的多,呵呵。前几天做了一个公用后台管理系统的项目,其中有一个地方涉及到权限管理的,即为每一个按钮赋一个权限,然后它权限汇总到角色表里,即一种角色有一些操作权限,表结构如下:我们看到OperatorAuthority就是操作权限的意思,它是个int类型的,一个role有一个OperatorAuthority,那我们应该怎么把多个权限存储到OperatorAuthority字段里呢?这时,我想到了枚举类型的位运算,所以我把权限枚举设计成了这样: 1 [Flags] 2 public enum UserOperato... 阅读全文
posted @ 2012-06-08 10:51 张占岭 阅读(2593) 评论(14) 推荐(2) 编辑
摘要:回到目录今天发表了《将不确定变为确定~表达式树是否可以有个集合,条件过滤有了新方向》文章后,马上有朋友问起,如何实现OR查询,如果实现AND查询,事实上它说的可能并不完整,完整的话应该是,“如何实现N个字段进行OR运算和AND运算”呢,没错,我在那篇文章中,条件过滤只是针对单个字段的,是一种AND运算,也是一种条件的过滤机制,即:有条件a1,a2,a3,它的过滤方式是先过滤a1,然后在剩下的结果里过滤a2,最后再过滤a3,它相然等同于a1 && a2 && a3,但如果要实现OR运算,我的那个程序就无能为力了,看看我们伟大的JamesJim同志写的这个OR与AN 阅读全文
posted @ 2012-06-07 23:41 张占岭 阅读(3142) 评论(8) 推荐(1) 编辑
摘要:回到目录对于我之前项目中的统一条件过滤采用了dictinary来实现的,优点就是方法签名统一了,缺点不用说,就是字典的键容易写错,感觉一进入.net3.5之后,一切都要和Expression联系在一起,我们在创建一个Expression(表达式树)时,可以使用lambda表达式去创建,很容易:1 Expression<Func<string, bool>> predicate= name=>name=="zzl";可以看到,它其它由一个委托组成,输入参数是个字符,输出是个布尔值,在LINQ中这种技术被广泛的使用在扩展方法中,如Where扩展方法 阅读全文
posted @ 2012-06-07 13:49 张占岭 阅读(2029) 评论(8) 推荐(5) 编辑
摘要:回到目录接口到底是什么,应该如何去使用它呢?书上说:“接口规定了一组操作的规范,它将一些不相关的对象联系在一起”,说是这样说,但在实际当中我们应该如何去用接口,如何去用好接口呢?事实上,我一直认为,在面向对象中,接口就是大哥大,用好接口,理解好接口,你对面向对象的认识也将上升一个新的台阶,接口不可遗忘的功能就是它实现了面向对象的多态性,多态,即一种对象,在接受指定信息时,实现指定的对象实例,这其实就是我对多态的比较直观的理解。一个用户操作的接口可能是这样被定义: 1 /// <summary> 2 /// 用户相关接口规范 3 /// </summary> 4 ... 阅读全文
posted @ 2012-06-05 23:53 张占岭 阅读(2040) 评论(7) 推荐(4) 编辑
摘要:一 如何让实体发生更新时,同时记录它更新的内容到日志表在日常生活中,有个订阅的事,如,订个报纸,当出版社出版后,报纸就会送到您家,你不用管它什么时候出版。在OA系统或者后台管理系统中,修改一条记录,总是想把它记住,等数据出问题后,好有据可查。如何去实现这样的效果呢,难道为每一个方法都写一个insertLog(log)方法吗?这也太不面向对象了吧,呵呵,做为一个懒型程序员,不会这样做的,呵呵。像这样:1 Log log=new Log{...};2 product.Update(entity);3 logRepository.insertLog(log);4 5 Log log=new Log{ 阅读全文
posted @ 2012-06-01 17:19 张占岭 阅读(2582) 评论(8) 推荐(3) 编辑
摘要:在第三讲中我们主要关注了代码重构的思想,从方法重构到类重构再到项目重构,这是一个过程,一种思想上的升华,今天将继续我们“程序复用性设计”的旅程,说一下方法重载的重要性。细心的朋友一定会非常关注net frameworks的源代码,即使只能看到它内部方法的定义,也足够了,在System.Web.Mvc这个命名空间下定义了很多关于MVC架构的东西,我们就以它为例来说一下方法重载吧!重载的好处:1 对方法调用的程序员来说,它是友好的(程序员只关心自己调用的方法签名即可,不用管参数为NULL怎么办这些逻辑)2 对于代码维护量来说,它是容易的(核心代码只放在参数签名最多的方法中)3 对于代码扩展来说,它 阅读全文
posted @ 2012-05-31 10:41 张占岭 阅读(2507) 评论(14) 推荐(4) 编辑
摘要:回到占占推荐博客索引 本系列的文章主要是讲C#基础,面向对象OOP及OOD的相关知识,而且本系列文章将一直会更新下去,感谢您的阅读 基础才是重中之重系列~目录 第一回 基础才是重中之重~类是怎么执行的 第二回 基础才是重中之重——面向抽象编程(抽象类的多态性) 第三回 基础才是重中之重——派生类集合 阅读全文
posted @ 2012-05-20 23:40 张占岭 阅读(7667) 评论(5) 推荐(14) 编辑
摘要:回到目录本文中的“二”,指的是二进制,即看见2就进一,也叫逢二进一,它是最为简单和清晰的数据,在现实生活中,人们用的最多的就是十进制数据,即逢十进一,看一下例子:二进制: 十进制0 001 0110 0211 03100 04看到了吧,在二进制中,不会出现比1大的数,除了0就是1,而在十进制中,不会出现10,它由0~9这10个数字组成。在我们的C#中,位运算分为左位移和右位移,分别用<<和>>表示,左移相当于向左移位,右面补0,例如:10 << 1 它的含义是10 0,它最后的结果就是100,相当于10进制的4,这时我们难看出左移1位,相当于乘2操作,返之还 阅读全文
posted @ 2012-05-09 17:31 张占岭 阅读(809) 评论(0) 推荐(1) 编辑
摘要:回到目录首先将来说一下Dispose是什么东西吧,对于我们使用非托管的资源时,需要自己去实现Dispose这个方法,它的含义就是释放使用的内存空间。例如Stream这个类型,它就是一个非托管类型,它会实现一个IDisposable接口,来实现Dispose方法像TransactionScope,.net事务,它也是一个非托管的,也就是说,我们在使用完事务后,需要自己去进行Dispose()操作,下面问题就来了,这个Dispose写在哪里合适呢?注意看这段代码:using (TransactionScope trans = new TransactionScope()) { ... 阅读全文
posted @ 2012-05-08 16:46 张占岭 阅读(929) 评论(2) 推荐(2) 编辑
摘要:本文章主要以上一篇文件的代码在写法上进行一个优化,更代码更精简,更能发挥.net 3.5为我们提供的已有功能,呵呵!首先,为了只有返回值的委托来说,我们是不用再去定义它的,完成可以用.net提供的Func<T>这个委托来实现同时,这个委托也支付多个输入参数的情况,和Func<>对应的一个委托叫Action<>,它没有返回值,可以由多个输入参数,下面是对Func<> 委托的使用实例,同样使用上一篇文章作为例子public class ReturnMessage { public static event Func<string> Ret 阅读全文
posted @ 2012-05-04 11:27 张占岭 阅读(979) 评论(0) 推荐(1) 编辑
摘要:事件是这样的,我觉得用事件来做这事比较好,它很好的遵循了“开闭原则”,当然这并不是最重要的,最重要的应该是它更符合程序开发的原则。场合:一个订单处理问题,一个订单的产生可能由多种途径生成,A产品走A产品的订单处理过程,完成后显示A产品的订单成功页,B产品走B产品的购买流程,完成后,显示B产品听订单成功页,当然陆续可能会有C产品,D产品等等实现:不考虑订单处理业务,只考虑订单成功页的显示解决1:由A产品页向订单统一处理程序传递参数,在订单统一处理程序里去判断参数,然后显示信息解决2:A产品订阅一个事件,去返回订单成功后显示的页面,在订单统一处理程序里触发这个事件,然后自己显示指定信息从上面两解决 阅读全文
posted @ 2012-05-03 14:07 张占岭 阅读(1162) 评论(0) 推荐(0) 编辑
摘要:回到目录答案是肯定的,一个DBML模型可以对应多个数据库,只要数据库中的表与模型中定义的表结构完成相同,就可以这个技术,我们可以用来开发一些通用的功能模块,如通过后台管理模块,我们将一些通用表进行抽象,如,对用户,角色,部门,菜单等进行抽象,将它的模块建立在我们的公用项目中,然后对这个模型进行操作,在建立DBContext上下文时,我们需要保留一个连接字符串,即,真正的项目中用哪个库,我们这个串就指定哪个库就行了。如图,后台表结构然后,它个模块可以用别对应包含这几个表结构的数据库,呵呵通用后台系统我会在之后的文章中给大家讲到,今天先看一下它的图像,呵呵大家可以看到,对于每一个项目的功能和作用, 阅读全文
posted @ 2012-04-26 11:20 张占岭 阅读(1612) 评论(6) 推荐(2) 编辑
摘要:回到目录如果在linq中希望进行一对多的复合查询时,请直接在查询中使用join into,或者使用let 关键字,当然在建立实体时动态赋值对于查询的性能也是没有影响的,两次查询结果完成相同一 :在实体中赋值var linq = from data in this.GetModel() join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID select new WebM... 阅读全文
posted @ 2012-04-26 10:11 张占岭 阅读(1059) 评论(1) 推荐(1) 编辑
摘要:回到目录在使用框架页时,它的子框架页面不能正常加载,而单独访问每个子页面是可以访问的,产生这个问题的原因是由于你的frameset节点位置不正确在网页中,它不能放在<body></body>之间,必须放在它的外面才行,就像这样:<html></head> <frameset rows="60,*" frameborder="no" border="0" framespacing="0"> <frame src="/Account/Statu 阅读全文
posted @ 2012-04-26 09:22 张占岭 阅读(1656) 评论(0) 推荐(1) 编辑