Fork me on GitHub
全局异常处理与异常日志

在MVC3网站的global.asax中的Application_Start方法里,有这样一段代码 

1   RegisterGlobalFilters(GlobalFilters.Filters);

它的主要使用是将全局过滤器进行注册,而全局过滤器可以在RegisterGlobalFilters这个方法里进行设置,如代码:

复制代码
 1    /// <summary>
 2         /// 全局过滤器(特性)
 3         /// </summary>
 4         /// <param name="filters"></param>
 5         public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 6         {
 7             // ExceptionLogAttribute继承自HandleError,主要作用是将异常信息写入日志系统中
 8             filters.Add(new Web.Commons.Attributes.ExceptionLogAttribute());
 9             //默认的异常记录类
10             filters.Add(new HandleErrorAttribute());
11         }
复制代码

当我们设置完上面两块后,现在如果想记异常日志,那我们需要完善一下ExceptionLogAttribute这个类,看代码:

复制代码
 1    /// <summary>
 2     /// 异常持久化类
 3     /// </summary>
 4     public class ExceptionLogAttribute : HandleErrorAttribute
 5     {
 6         /// <summary>
 7         /// 触发异常时调用的方法
 8         /// </summary>
 9         /// <param name="filterContext"></param>
10         public override void OnException(ExceptionContext filterContext)
11         {
12 
13             string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常的对象:{3}<br>异常目录:{4}<br>异常文件:{5}"
14                 , filterContext.Exception.GetType().Name
15                 , filterContext.Exception.Message
16                 , filterContext.Exception.TargetSite
17                 , filterContext.Exception.Source
18                 , filterContext.RouteData.GetRequiredString("controller")
19                 , filterContext.RouteData.GetRequiredString("action"));
20             VLog.VLogFactory.CreateVLog().ErrorLog(message); //TODO:将 ex 错误对象记录到系统日志模块
21             base.OnException(filterContext);
22         }
23     }
复制代码

大家可以看到,在上面类中,有个CreateVLog的方法,它是干什么用的呢,实事上,它就是我们的日志功能类,可以对日志进行不同类型的持久化,这我会在单独一讲中去说明它。

今天主要就是MVC3中的全局异常的记录方法,呵呵。

 
分类: .NET MVC

.NET MVC

 
摘要: 在MVC3网站的global.asax中的Application_Start方法里,有这样一段代码 1 RegisterGlobalFilters(GlobalFilters.Filters);它的主要使用是将全局过滤器进行注册,而全局过滤器可以在RegisterGlobalFilters这个方法里进行设置,如代码: 1 /// <summary> 2 /// 全局过滤器(特性) 3 /// </summary> 4 /// <param name="filters"></param> 5 public static v...阅读全文
posted @ 2012-06-15 23:55 张占岭 阅读(622) | 评论 (1) 编辑
 
摘要: 本系列文章主要是我在工作中,遇到一些不能主观判断的问题,最后在电脑上去证明我的理解是否正确,这也是题目“将不确定变成确定”的由来。记得我在上大学时,老师说过一句话:“机器最能证明一切”,这句话现在看来,确实很经典。第一回 将不确定变成确定~类中的override第二回 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行第三回 将不确定变成确定~frameset页面不能正确加载第四回 将不确定变成确定~LINQ查询两种写法,性能没有影响,优化查询应该是“按需查询”第五回 将不确定变成确定~LINQ DBML模型可以对应多个数据库吗第六回 将不确定变为确定~程序是否真的Dis阅读全文
posted @ 2012-06-15 23:27 张占岭 阅读(855) | 评论 (7) 编辑
 
摘要: 这篇文件需要搞清楚两个概念:1 怎么去设置友好的异常页面2 如何去收集页面产生的异常信息我们在网站开发时,一般需要设置两个异常页面,如404页面(资源未找到),500页面(系统内部错误,可能由某语句导致的某种异常),而如何去开启这个异常功能网上说法不少,但感觉把问题搞复杂,以及自己不太确实的答案很多,现在我就具体说一下:首先,两个问题是独立的,第一,友好的导演页面的设置,第二如何去收集产生异常的信息第一 友好的导演页面的设置方法:打开web.config文件,添加如下代码即可,其它文件不需要设置1 <customErrors mode="On" defaultRedi阅读全文
posted @ 2012-06-15 09:57 张占岭 阅读(449) | 评论 (6) 编辑
 
摘要: Razor引擎与业面元素组织更加清晰,没有过滤的<%%>标题,它不再需要什么结束标记,使用@就可以实现一个完整的绑定,闭合<%%>这件事人家razor已经为咱做好了,呵呵。Razor模板页:它使我们不用在使用master模板了,而razor模板引擎代码更简洁,清晰,下面我们来具体说一下在模板中的出现的元素:一 @Url.Content:是可以加载CSS和JS等文件,使用Url.Content可以为URL地址进行统一的管理和设置。1 <head>2 <meta http-equiv="Content-Type" content=&qu阅读全文
posted @ 2012-06-11 11:27 张占岭 阅读(1100) | 评论 (3) 编辑
 
摘要: 在第三讲中我们主要关注了代码重构的思想,从方法重构到类重构再到项目重构,这是一个过程,一种思想上的升华,今天将继续我们“程序复用性设计”的旅程,说一下方法重载的重要性。细心的朋友一定会非常关注net frameworks的源代码,即使只能看到它内部方法的定义,也足够了,在System.Web.Mvc这个命名空间下定义了很多关于MVC架构的东西,我们就以它为例来说一下方法重载吧!重载的好处:1 对方法调用的程序员来说,它是友好的(程序员只关心自己调用的方法签名即可,不用管参数为NULL怎么办这些逻辑)2 对于代码维护量来说,它是容易的(核心代码只放在参数签名最多的方法中)3 对于代码扩展来说,它阅读全文
posted @ 2012-05-31 10:41 张占岭 阅读(1567) | 评论 (14) 编辑
 
摘要: 你是否需要对一个页面进行登陆或其它权限的验证,你的作法是怎样的,可能在以前的程序开发中,会使用if .... else 这样的条件判断,遍布在你的程序代码中,而对于.net的程序员来说,有一个福音,那不是Attribute,即"特性"它的出现,改变了代码设计方式,你再也不需要到处都有的if else了,你只要把它写在一个自定义的Attribute里就可以了,其实.这也是net比其它更友好,更对程序员有吸引力的原因,也是我信仰它的原因.过去的程序:在一个需要登陆的页面可能你要写成这样1 if (string.IsNullOrEmpty(session("userid阅读全文
posted @ 2012-05-26 12:42 张占岭 阅读(1556) | 评论 (5) 编辑
 
摘要: 通过linq to sql生成的实体,有一些特性,这些特性就包括今天要用的 PropertyChanged和PropertyChanging这两个事件,它们分别记录了实体属性在修改前与修改后的事件变化,有时,我们使用linq to sql或EF去做为底层ORM时,在更新和删除操作时,总觉得性能不如T-SQL来的快,但LINQ TO SQL用起来实在比T-SQL要方便,这时,你是否有个想法,这T—SQL是否可以根据我们的要求自己生成呢,答案是肯定的,今天讲的就讲一个实现这种操作的基础知识 1 /// <summary> 2 /// 实体基类 3 /// </summary...阅读全文
posted @ 2012-05-25 15:54 张占岭 阅读(780) | 评论 (1) 编辑
 
摘要: 本系列将带您一步一步开发一个.net MVC,底层用linq to sql作为ORM的WEB应用程序,主要讲的不是开发细节,而是整体的架构方案,事实上,大部分项目架构的方式都是类似的,主要都是为业务层提供一个稳定的,可扩展的数据层,本系列主要是讲如何去设计一个基于数据仓库的Repository数据操作模型.第一回 MVC+LINQToSQL的Repository模式之(一)数据工厂第二回 MVC+LINQToSQL的Repository模式之(二)数据基类第三回 MVC+LINQToSQL的Repository模式之(三)Repository模式实现统一CURD操作,实现EF中的Find主键查阅读全文
posted @ 2012-05-21 23:02 张占岭 阅读(1048) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作阅读全文
posted @ 2012-05-19 15:38 张占岭 阅读(1612) | 评论 (2) 编辑
 
摘要: 在使用MVC开发应用程序时,如果希望根据不同的角色选择不同风格的页面,可以通过动态设置ViewResult对象中的MasterName属性来实现,具体看代码:一个对controller进行抽象的基类:View Code 1 public abstract class BaseController : Controller 2 { 3 /// <summary> 4 /// 默认构造方法 5 6 /// 根据角色为MasterFile进行赋值 7 /// </summary> 8 public BaseCon...阅读全文
posted @ 2012-05-17 15:08 张占岭 阅读(343) | 评论 (0) 编辑
 
摘要: 文章中解决的问题:1 Linq to SQL不支持返回显示实体问题 2 解决了实体中导航属性为集合时类型转换错误的问题 实体的设计: /// <summary>/// Linq原-生ú态类à型í的派é生ú类à,用来′临ù时±保£存结á果集ˉ/// </summary>public class WebManageUsers_Ext : WebManageUsers { }/// <sum...阅读全文
posted @ 2012-04-27 10:49 张占岭 阅读(333) | 评论 (0) 编辑
 
摘要: 答案是肯定的,一个DBML模型可以对应多个数据库,只要数据库中的表与模型中定义的表结构完成相同,就可以这个技术,我们可以用来开发一些通用的功能模块,如通过后台管理模块,我们将一些通用表进行抽象,如,对用户,角色,部门,菜单等进行抽象,将它的模块建立在我们的公用项目中,然后对这个模型进行操作,在建立DBContext上下文时,我们需要保留一个连接字符串,即,真正的项目中用哪个库,我们这个串就指定哪个库就行了。如图,后台表结构然后,它个模块可以用别对应包含这几个表结构的数据库,呵呵通用后台系统我会在之后的文章中给大家讲到,今天先看一下它的图像,呵呵大家可以看到,对于每一个项目的功能和作用,今天我就阅读全文
posted @ 2012-04-26 11:20 张占岭 阅读(188) | 评论 (4) 编辑
 
摘要: 之前我完了《重构,改善即有代码的设计》,这本书非常适合在编程中遇到瓶颈的朋友,看完这本书,一定让您有一种“拨开迷雾”的感觉,事实上这本书就像标题一样,主要是讲代码重构的知识的,从变量命名到语句编写,从语句到提取方法,从方法重构到类重构等等,每一篇文章都像是一道菜,让看过的人回味无穷,在这里班 下Martin Fowler大师。今天有点兴趣,准备按下来的几一写一下最近的作品《架构,改善程序复用性的设计》,主要从系统架构的角度,来设计一个可能被多个系统重用的公用项目集,下面是本课程的目录部分:第一讲 系统的复用性离不开系统的面向对象性第二讲 什么应该提取出来,什么应该保留第三讲 实现一种功能的代码阅读全文
posted @ 2012-04-23 22:34 张占岭 阅读(308) | 评论 (3) 编辑
 
摘要: 在我上一篇文章中,对实体验证的方式是如果所有字段不满足条件将会向集合中迭代返回一个结果,但有时,我们不希望验证所有对象,可以只是修改指定字段,如用户修改密码功能,可以对实体验证只考虑原密码,新密码和确认密码就可以了,而如果验证所有字段反而有点多此一举了,所以,我对实体类的验证部分进行了一个改动,看代码: /// <summary> /// 如果验证的字段为NULL表示验证...阅读全文
posted @ 2012-04-15 23:53 张占岭 阅读(355) | 评论 (6) 编辑
 
摘要: 说起数据验证,在我的博客中文章不少,有MVC标准验证,有自己架构中用到的验证,但一个共同的问题就是重复的代码量太大,而且破坏了数据库实体本身的层次感!即数据(实体)有效性验证就应该在实体层去实现,不应该推迟到WEB层去做这事,在之前的文章中我介绍了使用统一实体基类来做这事,但需要每个实体都去干预自己的部分(可能大部分情况下,每个实体的某些验证都是相同的,如非空验证),这样,对于懒惰的程序员来说,是...阅读全文
posted @ 2012-04-13 00:02 张占岭 阅读(483) | 评论 (1) 编辑
 
摘要: 以用户注册为例,来说一下MVC中向数据表中添加数据的方法 从WEB层说起:有两个action,分别实现显示注册界面和提交注册请求的作用,在action中,对表单实体进行了数据有效性的验证,代码如下: public ActionResult Register() { return View(); } [HttpPost] pub...阅读全文
posted @ 2012-04-10 23:32 张占岭 阅读(451) | 评论 (7) 编辑
 
摘要: 在XP下,IIS5是如何运行MVC站点的呢,在2003下的IIS6里很容易就可以运行MVC,但是IIS5中需要配置一下扩展名才行 选选择“默认网站”右键选择“属性”,出现下面界面后,选择“主目录”,然后选择“配置” 点击“配置”后出现下面界面 可以添加几个你在MVC路由中配置的扩展名,可以是aspx,asp,html,shtml等等 在可执行文件中选择.net4.0...阅读全文
posted @ 2012-04-04 22:36 张占岭 阅读(155) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作这是DBML系列的最后一讲,主要内容是将DBML文件进行抽象,把DBML里所有实体类阅读全文
posted @ 2012-03-30 23:06 张占岭 阅读(227) | 评论 (1) 编辑
 
摘要: UrlHelper对象实际上对一个表示请求上下文的RequestContext和路由对象集合的RouteCollection对象的封装,它对外界是只读的,在建立UrlHelper对象时,为它赋值,它的原型是这样: public class UrlHelper { public UrlHelper(RequestContext requestContext); ...阅读全文
posted @ 2012-03-29 17:42 张占岭 阅读(166) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作接上一篇文章,谈到了当属性被修改时,LINQ会帮助我们触发两个事件,它们是:publ阅读全文
posted @ 2012-03-27 23:45 张占岭 阅读(120) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作首先从这一篇的文章标题中可以看出,主要是讲dbml中对实体的属性赋值的相关知识,还有阅读全文
posted @ 2012-03-27 23:30 张占岭 阅读(229) | 评论 (1) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作分部方法,partial method,它要求必须定义在分部类里,上一文章已经说过分阅读全文
posted @ 2012-03-27 17:27 张占岭 阅读(151) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作先来看一下“百度百科”对单一职责的定义: 一个类,只有一个引起它变化的原因。应该只有阅读全文
posted @ 2012-03-26 23:44 张占岭 阅读(163) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作这个系列的主角将一直是linqtosql.dbml,我们一般叫它数据对象关系映射,或阅读全文
posted @ 2012-03-26 23:26 张占岭 阅读(287) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作当我们建立一个linq to sql的DBML文件后,我们可以打开它的代码文件,看一阅读全文
posted @ 2012-03-24 00:21 张占岭 阅读(413) | 评论 (0) 编辑
 
摘要: 一 DBContext的构造方法,方法的重载二 DBContext实例中,表实体对象是怎么被加入的三 分部类是否破坏了单一职责四 分部方法从另一方面定义了类型的操作规范五 LINQ实体类中对属性的赋值,变化前与变化后SendPropertyChanging与SendPropertyChanged六 LINQTOSQL中为我们触发了SendPropertyChanging和SendPropertyChanged,它的真正用意是什么七 为DBContext对象应该作为其它实体操作类型的基类,并为它提供统一的提交动作喜欢微软的东西,是因为它的东西没有告诉你“事情就是这样”,而告诉你的是“你认为事件应阅读全文
posted @ 2012-03-24 00:04 张占岭 阅读(177) | 评论 (0) 编辑
 
摘要: 说到override大家都知道,它是复写,子类去复写父类的方法与属性,是,没错,今天主要就说这个复写,如果不复写会有什么结果,有没有想过,呵呵来和我做个demo吧! 1 abstract class Parent 2 { 3 public virtual string Msg { get; set; } 4 } 5 6 7 class Sub : Parent 8 { 9 public override string Msg { get; set; } 10 11 }在另外一个类中为sub这个属性赋值,返回值为它的基类parentsta...阅读全文
posted @ 2012-03-13 16:33 张占岭 阅读(251) | 评论 (0) 编辑
 
摘要: 在MVC架构中,我们将一些通用模块通常写成一个“分部视图”或者HtmlHelper对象的“扩展方法”,这样在调用时方便,页面结构清晰,维护性高。 具体如果用分部视图实现,可能是这样: <%@ControlLanguage="C#"Inherits="System.Web.Mvc.ViewUserControl<SelectList>"%> <%=Html.DropDownList("C...阅读全文
posted @ 2012-03-05 23:55 张占岭 阅读(420) | 评论 (0) 编辑
 
摘要: 大家好,今天调点时间来说一下LINQ里的distinct(),以及解决过滤重复记录的方法 准备数据:先来个实体类,自己为它赋值,然后用 linq to object对象它进行distinct的操作public abstract class BaseEntity { public BaseEntity() : this(0) { } public BaseEntity(l...阅读全文
posted @ 2012-02-29 12:15 张占岭 阅读(325) | 评论 (0) 编辑
 
摘要: EF领域由code first,data first和model first三种模式,目前对于小型项目开发用code first就可以,操作灵活。 使用code first模式时,如果当实体添加、修改后,如果希望直接反映到数据表上,需要做一些设置; 比如,添加了一个userbase类型,希望把它反映到数据表上,我们可以这样做: public class DataContext : Db...阅读全文
posted @ 2012-02-27 15:03 张占岭 阅读(500) | 评论 (0) 编辑
 
摘要: 项目架构N层结构中,业务层无疑是比较灵活多变,与数据库层紧密联系,又同时约束WEB层的中间层,它是否应该有个基类,而如果有,那它的作用又是什么呢? 这就是今天要说的。 首先,我认为每个层都应该有个基类,它的使用当然就是将本层公共的代码进行抽象,可能是属性,方法等等,而对于业务层当然也不例外,先看一下我的业务层基类 serviceBase吧,看代码: public abstract clas...阅读全文
posted @ 2012-02-24 00:17 张占岭 阅读(476) | 评论 (0) 编辑
 
摘要: <%=Tsingda.XXB.Common.Utils.UrlDecode(i.KeyWord)%>这其实是一个基础知识的问题,我们在获取URL地址参数时,在设置或者获取时最好将它进行编码,这样就不会有问题了,例如:Standard.ClientHelper.AddSearchRecord(Common.Utils.UrlEncode(_keyword), Convert.ToInt32(_mod...阅读全文
posted @ 2012-02-23 12:52 张占岭 阅读(185) | 评论 (0) 编辑
 
摘要: 默认情况下,一个表单只能有一个提交事件,这不难理解,但有时我们需要有多个实现,早在ASP时代就可以实现这个功能,难道到了MVC时代后,功能削减了?当然不是,这和MVC本身有关,微软在这方面比较提倡一个提交事件对应一个action,这和它自代的实例是相吻合的,而一个action可能会根据请求方式不同分为GET和POST两种,这样的设计确实很清晰,代码可能是这样public ActionResult ...阅读全文
posted @ 2012-02-23 10:23 张占岭 阅读(714) | 评论 (2) 编辑
 
摘要: 本篇主要说一个lucene使用多个条件同时匹配的情况,如图所示 这个检索表示四个条件同时满足的结果,其中分类关键categoryname这个唯一字段,年级与科目比较复杂,它们两个同时关联propertyname字段,字段内容用| 分割,关键字它关键所有字段,在WEB项目中,首先需要对年级与科目进行处理,让它们形成一个|分割的形式 GroupPropertyName方法如下: 而在lucene底层需要对这三种检索形式进行设置 这样,我们就可以找到条件的结果集了。阅读全文
posted @ 2012-02-20 11:31 张占岭 阅读(187) | 评论 (0) 编辑
 
摘要: 我架构的以lucene为技术的全文检索分为lucene检索模块,索引文件生成器和WEB检索测试三个部分组成结构如下:lucene模块它由通过检索项和几个具体检索业务子项目组成通过功能项目结构为:其中的一个子项目结构为子项目只负责自己业务的实现,createIndexFile这个类型主要实现的是建立索引,而FieldKeys类型主要是设置表字段在WEB层测试时可以通过这段代码进行调用public class HomeController : ControllerBase { Web.Helper.UIHelper ui; public ActionResult Ind...阅读全文
posted @ 2012-02-18 23:38 张占岭 阅读(365) | 评论 (0) 编辑
 
摘要: 首先,建立一个windows服务项目然后进行设计视图在工作区空白处右属,添加一个安装项目然后就可以写我们的代码了,我们的服务需要实时监视MSMQ的队列中有没有记录,如果有,就向数据库中插入核心代码如下/// <summary>/// 接收来自MSMQ的消息,并保存到数据库/// </summary>public class MessageQueueService{ public static bool blnStopThread; public static string exTemp = string.Empty; public MessageQueueService阅读全文
posted @ 2012-02-10 13:28 张占岭 阅读(297) | 评论 (1) 编辑
 
摘要: 建立网站后,显示如下: 这是由于没有脚本访问权限导致的,解决方法: 这样设置后就可以了,呵呵阅读全文
posted @ 2012-02-03 15:26 张占岭 阅读(262) | 评论 (0) 编辑
 
摘要: 两个类对象: public class Product { public int ID { get; set; } public string Name { get; set; } public decimal Price { get; set; } public DateTime PublishDate { get; set; } } public class PrductList { public List<Product> Books { get; set; } }一个排序依据枚举:public enum ComparisonType { Price, PublishDate阅读全文
posted @ 2012-01-31 15:53 张占岭 阅读(170) | 评论 (0) 编辑
 
摘要: 只是看结构,没有分项目做,只是这例子,呵呵 项目总体图 Data层统一数据返回接口 Entity层,统一枚举值管理 Entity层实体统一继承IEntity,并派生一个第三方类型,用户查询时返回实体类型 Service层提取出抽象基类,它由公用属性及方法组成 Service层个性业务实现,它继承个性业务接口和业务基类 UI层直接调用Service的接口对象即可,根据不同的业...阅读全文
posted @ 2012-01-18 17:24 张占岭 阅读(516) | 评论 (0) 编辑
 
摘要: 下面代码主要是从一个复杂结果集中进行一个查询,在查询中使用的结果集还是一个复杂结果集。 什么是复杂结果集? 这是我给它的定义,它是由多张表进行关联查询后,生成的新的对象结果集或者原来结果集。如下图所示 GetUserInfoDetail()方法会产生一个复杂结果集,而GetUserBaseDetail()同样会产生一个复杂结果集,后者的结果集 而前者的结果集依赖。 代码如下: namespace...阅读全文
posted @ 2012-01-16 14:11 张占岭 阅读(304) | 评论 (0) 编辑
 
摘要: 实体设计还是向以往一样,有统一的接口进行规范,其次为了实现复杂表关联查询,将为LINQ表原生类型设计一个派生类 将它的导航字段(外延字段)设计在原对象里,用_Extend结尾,为的是和LINQ自动生成的表关系字段相区分 查询时,通过类型的协变特性,使它返回父类类型 这时,对外返回的类型还是LINQ原生对象,而它的派生类型在这里只是起到了“欺骗.NET运行时”的作用,呵呵阅读全文
posted @ 2012-01-12 10:26 张占岭 阅读(49) | 评论 (0) 编辑
 
摘要: 本问题,主要是在一个实体与其它实体可能有一对多的关系时才出现的,它们的实体关系可能被定义成这样而如果在LINQ中直接返回它的实体类型就会出现异常,这是正常的,因为这个类型正在被内存占用,呵呵而正确的做法应该是这样这样在返回复杂实体时是不会出错的,这返回时用到了类型的协变的特性。阅读全文
posted @ 2012-01-11 16:50 张占岭 阅读(156) | 评论 (0) 编辑
 
摘要: 今天主要想说一个MVC+LinqTOSql的系统架构中哪些东西可以,也应该进行抽象.MVC的WEB层应该进行抽象的是:统一的Controller,将其它controller公有的属性和方法进行一个抽象,方便以后扩展和维护.代码可能是这样: /// <summary> /// Controller基类 /// </summary> public abstract class ControllerBase : Controller { /// <summary> /// 通用信息(一般由service层返回的) /// </summary> prot阅读全文
posted @ 2012-01-08 23:49 张占岭 阅读(451) | 评论 (0) 编辑
 
摘要: 首先,在LINQTOSQL中可以这样建立一个dbcontext private TEntity GetOriginal(TEntity entity) { using (Entity.EEE114.LinqEEE114DataContext context = new Entity.EEE114.LinqEEE114DataContext()) { var table = context.GetTable<TEntity>(); return table.FirstOrDefault(e => e == entity); } } 这种写法缺陷就是每次在重新托数据库时,它就会自阅读全文
posted @ 2012-01-07 13:09 张占岭 阅读(272) | 评论 (0) 编辑
 
摘要: 这个问题是在做项目时遇到的,为了权限控制方法,我在ActionLink对象进行了重写,在调用时没有任何问题,但是我希望为我的链接加一个javascript:void(0)这类JS调用就出问题了,因为HtmlHelper里的这个方法必须有一个明确的controller对象,以便来组织一个合法的URL地址,如果你不传controller,它会用当前的,如果传空,它会用默认的,呵呵。最后,我在调用方法后加了个return false;解决了这个问题,这还要感谢我的哥们,“小肖子”解释成HTML代码,就是这样的<a onclick="updateStatus('11156阅读全文
posted @ 2012-01-05 15:07 张占岭 阅读(361) | 评论 (1) 编辑
 
摘要: 在程序中去模拟一个click事件是可以的,如果这个click事件是来自<a>标签的,那如果希望得到单击按钮的效果,IE可以,但火狐无法实现。先看一下模拟click事件的代码:<a href="http://www.sina.com" target="_blank" id="aa">ok</a> <script> var comment = document.getElementById('aa'); if (document.all) { comment.click();阅读全文
posted @ 2011-12-31 15:58 张占岭 阅读(245) | 评论 (0) 编辑
 
摘要: 对于一个程序员来说,有必要知道一个概念的同时也解它的执行过程,这样对于写出更好更安全的程序是有帮助的。大牛们不是一天就成为大牛的,而是经过一步一步的实践,不断的知识的积累才成为大牛的,呵呵。今天是我“基础才是重中之重”文章系列的又一讲,也是最基础的一讲,类,已经class主要从出生到死亡都讲一下,呵呵。1 类的建立public class Person{static person(){} //不写,默认也有个空的public person(){}//不写,默认也有个空的public string Name{get;private set;} //属性,只对本类开放写权限}这样,一个人就产生了,阅读全文
posted @ 2011-12-30 00:02 张占岭 阅读(991) | 评论 (7) 编辑
 
摘要: 我们挂在嘴过的一句话就是“static是静态对象,在类第一次被使用,或者第一次被实例化时执行“,但是你是否真正理解这句话,或者说你是否有对这句话进行一个实际的验证,如果没有,那我来带您完成这次旅行吧!首先有一张表,不会经常发生变化,比如分类表,他是一种树型结构表,结构可能是这样 /// <summary> /// 分类表 /// </summary> public partial class Common_Category : IDataEntity { //初始字段 #region original field /// <summary> /// ID /阅读全文
posted @ 2011-12-28 12:09 张占岭 阅读(721) | 评论 (4) 编辑
 
摘要: 主要用到了“调试”=》“附加到进程”F5进行网站,然后同时点“调试”=》“附加到进程”,然后在“工具”=》“附加到进程”然后,同一局域网或者自己的电脑上,打到你的IIS网站,当运行到断点后,就会自己捕捉了。这个功能非常有用,呵呵 !阅读全文
posted @ 2011-12-27 09:28 张占岭 阅读(230) | 评论 (0) 编辑
 
摘要: 本版本延续MVC中的统一验证机制~续的这篇文章,本篇主要是对验证基类的扩展和改善namespace Web.Mvc.Extensions{ #region 验证基类 /// <summary> /// 通用验证基类 /// </summary> public abstract class EntityValidationAttribute : ValidationAttribute { #region Constructors public EntityValidationAttribute(MessageType messageId, params object[] 阅读全文
posted @ 2011-12-21 23:02 张占岭 阅读(844) | 评论 (1) 编辑
 
摘要: 前段时间我发表的关于MVC架构中对验证方式的设计,收到了不少朋友的留言,意思是说过于复杂,复用性不高,当然我的出发点是减少实体部门的代码量。最近在朋友的建议下,看了另一种验证方式,事实上就是MVC实例中提供的实体属性验证方式,为每个视图加一个视图模型,对视图模型中的属性进行特性的约束即可。具体如下:WEB UI可能是这样<%using (Html.BeginForm()) { %> <%=Html.LabelFor(model=>model.Name) %> <%=Html.TextBoxFor(model=>model.Name) %> <阅读全文
posted @ 2011-12-20 23:12 张占岭 阅读(288) | 评论 (0) 编辑
 
摘要: 协变类型在分配和使用泛型类型方面提供了很大的灵活性, 例如,利用协变类型参数,可以执行非常类似于普通的多态性的分配。 假定您有一个名为 Base的基类和一个名为Sons的派生类。 多态性使您能够将 Sons的实例分配给 Base 类型的变量。 同样,由于 IEnumerable(Of T) 接口的类型参数是协变类型参数,因此可以将 IEnumerable<Sons>的实例分配给类型 IEnumerable<Base> 的变量,如下面的代码所示。IEnumerable<Sons> d = new List<Sons>();IEnumerable&l阅读全文
posted @ 2011-12-18 23:04 张占岭 阅读(178) | 评论 (0) 编辑
 
摘要: 编辑器加载中...这个问题有点怪,不过这是项目开发时一个同事问我的问题,实现上完成这个需要很容易, 通过HTTP上下文对象(HttpContext)就可以了. 你在action中的HttpContext就是这个action所指向的页面的上下文,所以向页面输出JS,我们可以这样实现HttpContext.Response.Output.Write("<script>alert('OK,呵呵')</script>");这个意思是说,将write()里的文本流追加到当前HTTP响应流中。小知识:在ASPX中输出文本信息我们通常会这样实现&l阅读全文
posted @ 2011-12-18 00:21 张占岭 阅读(487) | 评论 (0) 编辑
 
摘要: 首先如果您使用linq to sql的底层数据支持,那这篇文章比较适合您,这也是一个系列,本文主要说添加操作 WEB层 实现对象创建 Service层 实现逻辑处理与业务组合 DAL层 实现操作最基础功能的插入 到这里,一个完整的记录插入流程就走完了,呵呵阅读全文
posted @ 2011-12-17 00:02 张占岭 阅读(326) | 评论 (0) 编辑
 
摘要: 随着系统的庞大,你的全局信息保存在appsitting里可能会比较乱,不如为模块写个自定义的全局常量吧 首先,在Web.config中的代码可能是这样 而ConfigurationSectionForSite.WebSiteInfoHandler需要我们定义成这样 最后在页面需要的位置调用,可能这样就可以了阅读全文
posted @ 2011-12-11 22:46 张占岭 阅读(191) | 评论 (0) 编辑
 
摘要: 几个常用的全局常量 调用Web.config节点的方法阅读全文
posted @ 2011-12-11 00:15 张占岭 阅读(169) | 评论 (0) 编辑
 
摘要: 项目为何要设计成N层架构?为何会有WEB,BLL和DAL,这些东西我们今天姑且不说,单说为什么要把BLL层进行抽象。 在之前我的博客中有一篇对WEB层的Controller进行了抽象,实现上对BLL层也可以进行一个必要的抽象,将大部分公用 的属性和方法进行抽象,提取到一个新的抽象类中,让其它BLL的业务逻辑类型去继承它,享用它内部公用的属性和方法 ,这在以后维护和扩展及程序稳定性上都非常重要...阅读全文
posted @ 2011-12-09 21:24 张占岭 阅读(342) | 评论 (0) 编辑
 
摘要: 呵呵,一个有趣的话题,事务(不是TSQL中的事务,只是指 System.Transactions下的TransactionScope类型)底道应该放在哪个层? 可以说,这个话题看你怎么看了: 如果同意在BLL层的,理由是:事务主要用来处理复杂逻辑,而复杂逻辑操作多表时需要用到事务,所以事务放在BLL层用来实现“逻辑组合”。而DAL层只负责最基础的数据操作,不管业务逻辑。 如果同意在DAL层的,理由...阅读全文
posted @ 2011-12-09 11:33 张占岭 阅读(643) | 评论 (2) 编辑
 
摘要: 实体的验证分部类定义如下 前台controller里进行数据有效性的验证,成功就进行数据处理,不成功就返回错误 前台页面配合JQuery强大的验证功能,实现动态验证 MVC集成表单验证输出单元,显示验证错误消息 怎么样,MVC够酷吧,呵呵!阅读全文
posted @ 2011-12-06 12:05 张占岭 阅读(381) | 评论 (8) 编辑
 
摘要: 将所有controller的公共属性和方法提取出来,放到一个controller基类里,共其它controller使用,这无疑不是一个好的选择,以下是我的项目中controller层的抽象,分享一下代码:/// <summary> /// Controller基类 /// </summary> public abstract class ControllerBase : Controller { #region Fields #endregion #region Constructor #endregion #region Properties /// <summ阅读全文
posted @ 2011-12-04 00:38 张占岭 阅读(267) | 评论 (0) 编辑
 
摘要: /// <summary> /// 业务层抽象基类 /// </summary> public abstract class ServiceBase { /// <summary> /// 通用消息 /// </summary> protected...阅读全文
posted @ 2011-11-29 23:18 张占岭 阅读(392) | 评论 (0) 编辑
 
摘要: 这种需求,用一个ASPX页面和一个ASCX分部视图就可以解决了,ASPX提供对ASCX的引用,ASCX显示列表信息,ASPX主页面提供查询功能 <% using (Html.BeginForm()) {%> <%Html.RenderAction("AllPropertyForSelectList", "Common"); %><input type="button" value="查询" class="button" id="search" /阅读全文
posted @ 2011-11-29 13:03 张占岭 阅读(335) | 评论 (0) 编辑
 
摘要: /// <summary> /// 数据操作基类 /// </summary> public abstract class TESTRepositoryBase { /// <summary> /// 数据库基类 /// </summary> protected Entity.TEST.LinqTESTDataContext db = (Entity.TEST.LinqTESTDataContext)DbFactory.Intance("TEST", System.Threading.Thread.CurrentThread)阅读全文
posted @ 2011-11-20 10:06 张占岭 阅读(350) | 评论 (2) 编辑
 
摘要: /// <summary> /// 通过主键,得到实体 /// 始终从数据库中获取数据 /// </summary> /// <param name="keyValues"></param> /// <returns></returns>public TEntity Find(params object[] keyValues) { var mapping = _db.Mapping.GetTable(typeof(TEntity)); var keys = mapping.RowType.Identi阅读全文
posted @ 2011-11-15 03:50 张占岭 阅读(244) | 评论 (0) 编辑
 
摘要: 注意,在使用datacontext对象时,它会产生数据缓存,也就是为了提高读取数据速度,它会将数据库对象进行缓存,或者返回为IQueryable结果集,使数据查询结果持续到需要得到数据的时间才去真正的select 动作。如果希望datacontext对象每次取数据时,都从数据库中得到数据,即select操作,可以这样: this._db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, entity);注意,这里的entity是一个实体,即当进行数据库更新操作时,希望datacontext 得到最新更新的数据,可以用上面语阅读全文
posted @ 2011-11-15 03:47 张占岭 阅读(321) | 评论 (3) 编辑
 
摘要: 前几天看了老赵的Translate方式解决多表关联后产生实体类型问题,但多数据量时还是不太妥当,所以最后还是用老的方法,建立一个实体类来解决这个问题 首先我让实体类和LINQ表类型名称一样,只是加了个后缀用来区分,并让它去继承LINQ表对象,这样它将有表对象的所有非私有的属性和方法。 如图: IEntity是个接口,只要继承它,就必须实现它的一个PrimaryKey这个属性,它用来统一表对象的主...阅读全文
posted @ 2011-11-11 11:43 张占岭 阅读(355) | 评论 (0) 编辑
 
摘要: namespace Service{ public class Service<TEntity> : IService<TEntity> where TEntity : class,Entity.IEntity { private IRepository<TEntity> iRepository = null; public Service() { iRepository = new Repository<TEntity>(); } #region IService<TEntity> 成员 public TEntity GetMode阅读全文
posted @ 2011-11-08 13:40 张占岭 阅读(375) | 评论 (0) 编辑
 
摘要: namespace Data.TEST{ /// <summary> /// 数据通用操作实现 /// </summary> /// <typeparam name="TEntity"></typeparam> public class Repository<TEntity> : TESTRepositoryBase, IRepository<TEntity> where TEntity : class,IEntity { #region IRepository<TEntity> 成员 pu阅读全文
posted @ 2011-11-08 13:36 张占岭 阅读(350) | 评论 (1) 编辑
 
摘要: namespace Data.TEST{ /// <summary> /// 数据操作基类 /// </summary> public abstract class TESTRepositoryBase { /// <summary> /// 数据库基类 /// </summary> protected Entity.TEST.LinqTESTDataContext _db = (Entity.TEST.LinqTESTDataContext)DbFactory.Intance("TEST", System.Threading阅读全文
posted @ 2011-11-08 13:34 张占岭 阅读(325) | 评论 (0) 编辑
 
摘要: namespace Data{ /// <summary> /// 数据库建立工厂 /// Created By : 张占岭 /// Created Date:2011-10-14 /// Modify By: /// Modify Date: /// Modify Reason: /// </summary> internal static class DbFactory { static Sy...阅读全文
posted @ 2011-11-08 13:33 张占岭 阅读(490) | 评论 (0) 编辑
 
摘要: namespace System.Linq.Dynamic{ public static class DynamicQueryable { public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values) { ...阅读全文
posted @ 2011-11-07 23:04 张占岭 阅读(361) | 评论 (0) 编辑
 
摘要: 首先它是一个具有返回类型为ViewResult的一个方法,也就是说,我们可以通过返回ViewResult对象来代替View()方法,下面的操作是合法的 ViewData.Model = model; return new ViewResult { ViewName = viewName, MasterName = this.MasterFile, ViewData = ViewData, TempData = TempData }; 它在一般情况下等同于return view(model),这是微软为我们封装好的方法,让我们省去了不少代码,它的view(object model)方法原型可能.阅读全文
posted @ 2011-11-04 10:35 张占岭 阅读(386) | 评论 (0) 编辑
 
摘要: action中定义一个得到结果集的方法 public ActionResult GetItemTree(string title, int itemid, int? page) { pp = new PagingParam(page ?? 1, VConfig.WebConstConfig.PageSize); Common.Page.PagedList<Entity.Res_Item_Resource_R> res_Item_Resource_R = iResourceService.GetRes_Item_Resource_RByItemId(itemid, pp); View阅读全文
posted @ 2011-11-04 10:20 张占岭 阅读(393) | 评论 (0) 编辑
 
摘要: 这个问题是这样的,datacontext是linq to sql数据模型的底层数据库对象所有LINQ数据表对象都是由它派生的,只要你建立一个数据库操作,就建立一个datacontext对象,当然,你可以选择用静态的datacontext,但这是不推荐的,这在微软MSDN和阿布老兄上已经说的很清楚了。言归正传,datacontext对象在频繁调用时,会出现读取数据错误问题,这个我已经测试过,确实有这种情况,现在说一下解决方法首先建立一个数据实体对象,它是与linq数据表相同的类型,如userbases,在读取数据库对象时可以用db.userbases,这样读的时候,在刷新频繁的时间,就出现问题了阅读全文
posted @ 2011-10-31 22:23 张占岭 阅读(248) | 评论 (2) 编辑
 
摘要: 首先,我们一般在shared里面做的公用的ascx分部视图,没有特定的action,一般是把逻辑写在页面上,这样给页面载荷比较大。事实上MVC2.0提供了一个方法,用来在页面上加载Action,通过这个方法,可以使分部视图活起来看代码。banner.ascx<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<MvcApplication1.Controllers.Banner>>" %><%foreach (var i i阅读全文
posted @ 2011-10-28 22:39 张占岭 阅读(406) | 评论 (0) 编辑
 
摘要: 今天用LINQ的update出现问题了,LINQ的BUG不少,呵呵,所以自己把TSQL拿出来,做了一个封装,适用的所有表,更新有两种,普通更新和记数更新看代码:这两个方法是写在DAL里的数据操作基类里的,只有它的子类可以用它,所以用protected做为限制 /// <summary> /// 通用更新方法 /// </summary> /// <param name="tableName">表名</param> /// <param name="param">参数列表,奇数为字段,偶数为他前一阅读全文
posted @ 2011-10-28 15:50 张占岭 阅读(238) | 评论 (0) 编辑
 
摘要: 首先,我们应该把数据提交方法做到一个数据库基类里,就像这样public abstract class dbBase { public virtual void SubmitChanges() { ChangeSet cSet = db.GetChangeSet(); if (cSet.Inserts.Count > 0 || cSet.Updates.Count > 0 || cSet.Deletes.Count > 0) { try { db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict); /阅读全文
posted @ 2011-10-26 15:00 张占岭 阅读(160) | 评论 (1) 编辑
 
摘要: 首先,我们要重写一个View方法,才能更好的返回指定的master页面对于前台controller来说,我们建立一个它的基类/// <summary> /// 前台Controller的基类, /// 提供一些共同属性和方法 /// Created By : 张占岭 /// Created Date : 2011-10-17 /// Modify By: /// Modify Date: /// Modify Reason: /// </summary> public abstract class BaseController : Controller { /// &l阅读全文
posted @ 2011-10-18 09:50 张占岭 阅读(224) | 评论 (0) 编辑
 
摘要: 实事上,一个错误的理解就是Complete()方法是提交事务的,这是错误的,事实上,它的作用的表示本事务完成,它一般放在try{}的结尾处,不用判断前台操作是否成功,如果不成功,它会自己回滚。 #region 事务问题 using (TransactionScope trans = new TransactionScope()) { try { InsertUserBase(); //它插入不成功,自己回滚 UserInfos userInfo = new UserInfos { UserID = "1", RealName = "zzl", }; db阅读全文
posted @ 2011-10-18 09:26 张占岭 阅读(297) | 评论 (1) 编辑
 
摘要: AJAX分页和搜索,一般是两个文件,主文件aspx一般是显示搜索表单,而ascx分部视图中显示列表,一般代码如下: <%=Html.TextBox("UserName") %> <input type="button" id="search" value="搜索" /> <div id="List"> <%Html.RenderPartial("UCList", Model); %> </div>需要对按钮进行触发,阅读全文
posted @ 2011-10-11 16:44 张占岭 阅读(512) | 评论 (1) 编辑
 
摘要: 在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm()) { %> 姓名:<%=Html.TextBoxFor(model=>model.UserName) %> Email:<%=Html.TextBoxFor(model=>model.Email) %> 年龄:<%=Html.TextBoxFor(model=>model.Age) %> <input type="button" id=&quo阅读全文
posted @ 2011-10-10 22:13 张占岭 阅读(297) | 评论 (0) 编辑
 
摘要: 用户数据表,每个用户有一个或者多个权限,用户表如下userid,roleid,username等权限枚举如下:public class CustomEnum { [Flags] /// <summary> /// 用户角色枚举 /// </summary> public enum UserRole { /// <summary> /// 游客 /// </summary> Visitor = 1, /// <summary> /// 学生 /// </summary> Student = 2, /// <summar阅读全文
posted @ 2011-09-30 16:04 张占岭 阅读(623) | 评论 (0) 编辑
 
摘要: namespace Entity{ public interface IPagedList { /// <summary> /// 记录数 /// </summary> int TotalCount { get; set; } /// <summary> /// 页数 /// </summary> int TotalPages { get; set; } /// <summary> /// 当前页 /// </summary> int PageIndex { get; set; } /// <summary> 阅读全文
posted @ 2011-09-23 00:42 张占岭 阅读(581) | 评论 (1) 编辑
 
摘要: 在我们建立Action时,有个原则,就是最好和页面名称相同,如果一个名为Index的Action,那它的页面就应该是Index.aspx/cshtml,如果你非要建立一个Index1.aspx,那路由是无法找到的,当然,如果你想让路由找到,就用return View("Index1")来代替return View()就可以了阅读全文
posted @ 2011-09-20 16:52 张占岭 阅读(375) | 评论 (1) 编辑
 
摘要: 在业务逻辑层实现IOC,可以有效的减少代码量,把通用的操作写在通用的类中,然后在UI层对谁操作就建立谁的实例。 具体做法看代码: Service层核心代码: 接口规范: namespace Service { /// <summary> /// 标准逻辑处理接口 /// </summary> /// <typeparam name="TEnt...阅读全文
posted @ 2011-09-16 14:23 张占岭 阅读(570) | 评论 (1) 编辑
 
摘要: 过去的过去,往往对于一种问题有一个很直观的解决方法,如,判断用户是否登陆,判断用户session是否为空,一般会这个写在页面中: if(HttpContext.Session.IsNewSession){ // go to Logon}每个需要验证的页面都要这样去写同样的代码,这样的程序是我们不提供的,因为它重复了自己。当.net出现Attribute之后,MVC出现了之后,改变了这一切,如果...阅读全文
posted @ 2011-09-14 16:16 张占岭 阅读(639) | 评论 (0) 编辑
 
摘要: 前一篇说了标准的服务器架构方案,事实上,那是系统建立完成后的事情,在开发时,我们很少这种去设计,也没有必要这样去做,测试环境我们可以使用hosts这个文件来实现,我们可以把5个服务器放在一台电脑上,安装上IIS,然后分别建立站点,如 www.test.com www服务器 img.test.com 图像、脚本服务器 file.test.com 文件服务器 db.test.com...阅读全文
posted @ 2011-09-14 15:16 张占岭 阅读(210) | 评论 (0) 编辑
 
摘要: 以前的程序: ViewData["msg"] = "{result:true,FileName:\"" + new FileInfo(Request.Files[0].FileName).Name + "\",FileUrl:\"" + fileurl.Replace("\"", "") + "\"}";重构之后的程序: JsonResult j = Jso...阅读全文
posted @ 2011-09-13 12:13 张占岭 阅读(250) | 评论 (0) 编辑
 
摘要: EF4.1已经推出有一段时间了,它给人的第一吸引力就是比LINQ TO SQL更加适合大型项目,它的封装更加紧密,操作也更加灵活,而且弥补了LINQ To SQL的最大不足,可以支持多种数据库。 EF4.1+ASP.NET MVC+JQuery 第一先说一下EF4.1: 我们数据层OR/Mapping采用EF4.1来实现数据的持久化 我们必须要对EF4.1进行一个封装,把对数据的操作限制...阅读全文
posted @ 2011-09-09 12:38 张占岭 阅读(1228) | 评论 (10) 编辑
 
摘要: 最近做了一个项目,有个问题,就是对用户ID进行页面间的传递,但又想把用户ID进行加密后传递,这样更安全,在这个过程中会出现一个问题,就是URL编码问题,如果不对URL进行编码直接加码,那么在解码时,如果字符串存在“+”这种特殊符号,在解码时会出它替换成“ ”,此时在解密就会无法解开,导致错误的结果。 解决方法: 加密后,进行URL编码,然后到另一页面后,进行URL解码,再解密 结果:失败 ...阅读全文
posted @ 2011-09-08 09:54 张占岭 阅读(108) | 评论 (1) 编辑
 
摘要: 事情是这样的,我有三张表,用户_角色关系表User_Role,角色_菜单关系表Role_Menu和菜单表 Menu,这三个表之间有如下关系: User_Role=>RoleId=>RoleMenu RoleMenu=>MenuId=>Menu 它们之间的业务关系是: 当用户登陆后,通过UserId得到User_Role列表,将用户所包括的角色得出 通过User_Role找到所有对应M...阅读全文
posted @ 2011-08-26 11:47 张占岭 阅读(235) | 评论 (1) 编辑
 
摘要: 事实上,MVC中已经很好的封装了Json,让我们很方便的进行操作,而不像JS中那么复杂了。 MVC中: public JsonResult Test() { JsonResult json = new JsonResult { ...阅读全文
posted @ 2011-08-25 16:33 张占岭 阅读(1658) | 评论 (5) 编辑
 
摘要: 首先是枚举对象的遍历 #region 类型列表框 typeitems = new List<SelectListItem>(); foreach (string i in Enum.GetNames(typeof(ServiceDocumentType))) { typeitem...阅读全文
posted @ 2011-08-24 11:00 张占岭 阅读(215) | 评论 (0) 编辑
 
摘要: // 将用户控件转换为字符串01 public static string RenderPartialToString(string file, object view)02 {03 ViewDataDictionary vd = new ViewDataDictionary(view);04 ViewPage viewPage = new ViewPage { ViewData= vd };05 Control control = viewPage.LoadControl(file);06 07 viewP...阅读全文
posted @ 2011-08-19 12:23 张占岭 阅读(306) | 评论 (2) 编辑
 
摘要: 先看一下我想要的结果: 很容易它就是一个单选按钮组,当我后台为Html对象(HtmlHelper的一个实例,它被定义在System.Web.Mvc名称空间下的WebViewPage类,即它对于所有MVC页面都可用)建立好扩展方法后,使用以下语句就可以生成上面的效果: @Html.CreateGanderRadioButton()扩展方法的定义: namespace Web.Helper { pub...阅读全文
posted @ 2011-08-19 12:04 张占岭 阅读(174) | 评论 (0) 编辑
 
摘要: 编辑器加载中... 例如当前URI为:http://www.test.com/zzl/renren?id=1 获取绝对URI的路 System.Web.HttpContext.Current.Request.Url.AbsolutePath (/zzl/renren) 获取绝对URI System.Web.HttpContext.Current.Request.Url.AbsoluteUri (www.test.com/zzl/renren) 获取服务器的主机名或IP地址和端口号 System.Web.HttpContext.Current.Request.Url.Authority (www阅读全文
posted @ 2011-08-04 10:59 张占岭 阅读(184) | 评论 (0) 编辑
 
摘要: 前提:所有页面用的是一个母板页,并且导航菜单放在母板页HTML代码如下: <div class="mainnav"> <ul class="banner"> <li class="index"><a href=HTTP://A.COM/HOME>首页</a></li> <li class="index"><a href=HTTP://A.COM/NEWS>考试资讯</a></li> <li 阅读全文
posted @ 2011-08-02 11:52 张占岭 阅读(316) | 评论 (4) 编辑
 
摘要: 如果您的a.com.cn站点需要与b.com.cn站点共享cookies,一般满足这种要求的系统是为了做单点登陆的,现在我来讲一下实现方法: a.com.cn登陆后,写cookies,在b.com.cn里,登陆状态为已经登陆,即它们的cookies可以共享 在a.com.cn站里写cookies的同时,调用b.com.cn里的写cookies的方法,代码如下 <script type="text/javascript"> function CategoryRedirect(id, url) { location.href = "/Help/Catego阅读全文
posted @ 2011-08-01 14:52 张占岭 阅读(300) | 评论 (4) 编辑
 
摘要: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Data.Linq; 6: using System.Threading; 7: 8: namespace Data 9: { 10: /// <summary> 11: /// LINQ数据库连接对象制造工厂 12: /// </summary> 13: static internal class DataContextFactory 14: 阅读全文
posted @ 2011-07-28 22:41 张占岭 阅读(342) | 评论 (0) 编辑
 
摘要: 文件上传无论在软件还是在网站上都十分常见,我今天再把它拿出来,讲一下,主要讲一下它的设计思想和实现技术,为了它的通用性,我把它做在了WEB.Service项目里,即它是针对服务器的,它的结构是关联UI(WEB)层与Service层(BLL)的桥梁.结构上传基类:上传文件的接口规范:接口的实现:UI层调用WEB.Service层的上传功能:(附代码) public class FileUploadController : Controller { WEB.Services.IFileUpload iFileUpload = null; public FileUploadController() 阅读全文
posted @ 2011-07-19 16:33 张占岭 阅读(502) | 评论 (11) 编辑
 
摘要: 前提:数据底层,使用的是MVC架构,对于数据表中的状态及相关字段,采用了枚举型进行对应1 序列中不包含任何元素 解决:将Single()改为DefaultOrSingle()2 序列包含一个以上的元素 解决:很多情况都是原始数据的问题3 不能在已使用的实体上添加新实体 4 Duplicate key is already , 3,4的解决为:用 base._db.ExecuteCommand()进行SQL语句的重写,不要用LINQ自带的insert,就不会出现错误了5 未将对象引用设置到对象的实例。 值不能为空。参数名: source。 解决: this.iProduct_ProductFil阅读全文
posted @ 2011-07-18 18:02 张占岭 阅读(377) | 评论 (1) 编辑
 
摘要: 对于在页面上显示的文本框信息,我们在视图模块中定义成string就可以了,但如果是列表框呢,我们应该如何去定义更合理些呢?起初,我使用的方法是ViewData,然后在页面中再去强类型一下,如<%= Html.DropDownList("Type1",ViewData["Type"])%>这种方法破坏了对象的完整性,使它脱离了与对象的关系,我在做程序开发时,提供下面这种写法:<%= Html.DropDownList("Type1",Model.Type)%>这种写法说明,Type是本页面模块中的一个属性,类型为阅读全文
posted @ 2011-07-15 14:53 张占岭 阅读(284) | 评论 (2) 编辑
 
摘要: Model:对于MVC来说,Model可不简单只是实体,它应该叫视图模型,这是我自己的理解,即视图中的数据由Model来提供,当视图的数据需要改变时,我们不用打开aspx或ascx文件,只需要修改相应的Model即可.我们要把Model看成是一个视图类,和界面有关的类,它内部的属性只和指定的页面有关,多于的属性则不需要.事实上MVC的实例已经说的很清楚了,仔细研究研究就会有一个很高的提高,理解它的意义,它的设计思路.不要把Model和Entity相混涤了,Entity是指与数据库对应的实体类,它与数据表一一对应,它可以通过一些代码生成器和entity framework生成工具和生成.看个例子阅读全文
posted @ 2011-07-14 18:01 张占岭 阅读(537) | 评论 (5) 编辑
 
摘要: 今天有点时间,来说说如何设计的实体类更加合理,灵活,规范.首先,那要和真实数据表一一对应,必要的话,可以对类型抽象化,可以引入枚举,泛型列表等类型;其次,对实体要集成它的数据有效性的验证功能;再次,为了数据操作方便,有必要去引入数据表字段的列举集合;综上所述,我们来设计一个用户表实体;本例中的知识点为:部分类,接口规范,Flag属性的枚举,迭代器等 /// <summary> /// 数据实体统一接口 /// </summary> public interface IDataEntity { } /// <summary> /// 用户实体 /// <阅读全文
posted @ 2011-06-30 11:49 张占岭 阅读(367) | 评论 (0) 编辑
 
摘要: controller代码: public ActionResult UploadPicture() {return Content("ok"); // return Content("{result:'" + imgMsg + "',url:'" + imgUrl + "'}"); //本行是反回json格式的字符 }AJAX代码: $.ajax({ type: "POST", url: "/ClassBasic/UploadPicture",阅读全文
posted @ 2011-06-21 17:35 张占岭 阅读(238) | 评论 (4) 编辑
 
摘要: ASPX文件<table id="list"> <thead> <tr> <td> ID </td> <td> 用户名 </td> <td> 建立日期 </td> </tr> </thead> <tbody> <%foreach (var userbase in ModeluserBase) { %> <tr> <td> <%=userbase.UserID %> </td>阅读全文
posted @ 2011-06-21 13:37 张占岭 阅读(78) | 评论 (0) 编辑
 
摘要: $(function() { $("#updateBtn").click(function() { if ($("#password").val() == '') { $("#validMessage").html('请输入密码').show(); $("#password").focus(); return false; } if ($("#repassword").val() == '') { $("#validMessage&quo阅读全文
posted @ 2011-06-14 17:51 张占岭 阅读(177) | 评论 (0) 编辑
 
摘要: 列表主页Action内容: public ActionResult HelpList() { Entity.Commons.VPredication vp = new Entity.Commons.VPredication(); Entity.Commons.PagingParam pp = new Entity.Commons.PagingParam(1, 10); Entity.PagedList<Entity.HelpDocument> list = _HelpDocumentServices.GetHelpDocument(vp, pp); List<Entity.H阅读全文
posted @ 2011-06-01 17:50 张占岭 阅读(418) | 评论 (4) 编辑
 
摘要: ASHX内容: #region IHttpHandler Members public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/x-javascript"; List<User> list = new List<User>(); for (int i = 0; i < 10; i++) { list.Add(new User { UserName = "zzl" + i, Tel = &quo阅读全文
posted @ 2011-05-27 16:47 张占岭 阅读(173) | 评论 (0) 编辑
 
摘要: MVC路由的选择是从上向下去找到,当找到满足条件的路由后会自动跳出.namespace OA { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute阅读全文
posted @ 2011-05-20 13:34 张占岭 阅读(112) | 评论 (0) 编辑
 
摘要: namespace OA.Filter { public enum UserToUrlEnum { /// <summary> /// 登录页面 /// </summary> Login, /// <summary> /// 这个角色是否具有审批权限 /// </summary> Approved, } /// <summary> /// 用户验证过滤器 /// </summary> public class UserAuthentication : AuthorizeAttribute { public UserToUr阅读全文
posted @ 2011-05-20 13:27 张占岭 阅读(387) | 评论 (0) 编辑
 
摘要: #region 简单数据层代码,足可以说明面向接口的编程思想,一种思想的提高才是真正的提升 /// <summary> /// 简单数据工厂 /// </summary> internal class Factory { volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>(); static System.Timers.Timer t = new System.Timers.Timer(10阅读全文
posted @ 2011-05-18 14:33 张占岭 阅读(234) | 评论 (0) 编辑
 
摘要: MVC是什么?多层构架又是什么?首先不要把这两个东西混在一起,它们是两个东西,首先说一个多层构架,它一般指将项目分为三个层次进行开发,即UI(WEB)表示层,BLL(Service)业务层和DAL(Data)数据访问层,它是一种开发项目的模式,也是多人开发的一种最好的选择;而MVC它是建立在UI(WEB)表示层中的一种将代码与页面分层和对URL优化的一种方案,它与多层构架没有关系,MVC只是对表示层进行了一种划分而以,它有利于团队分层开发。看图一下:UI层 {MVC三层模式(View,Model,Controller)或者是非MVC模式}BLL(Service)层{对业务逻辑进行判断}DAL(阅读全文
posted @ 2010-03-25 11:55 张占岭 阅读(116) | 评论 (0) 编辑
posted on 2012-06-16 23:36  HackerVirus  阅读(2069)  评论(0编辑  收藏  举报