我也发布一个MVC程序(一)

       就在前两天,看到园子里一个哥们帮别人做个project,结果做了好久别人说不做了,正觉得那哥们冤的时候,没想到很快同样的事情便落在我身上,幸好我的东西只做了个开头,便被告知暂停,没有浪费太多的精力。废话不多说,我也上源码。

       我做的是一个绩效考核系统,将代码传上来,只有简单的小框架,因为未完工,可能有点简单,勿喷大声笑

      先看工程截图:                                                                                          1

       

       接触过Asp.net MVC的园友可能已经看出来了,这是用asp.net MVC3 开发的,其中cshtml是Razor engine的View页面。ASP.NET MVC 应用程序是开发 ASP.NET Web 窗体页面的一种替代方法;但 ASP.NET MVC 应用程序未取代 Web 窗体模型。个人觉得Razor语法糖很好用,MVC框架比Web有特有的优势。刚接触MVC 3的园友可以看MSDN MVC的指导文章^_^

     首先,新建工程,选择MVC 3 App ,建立empty project,View Engine选择Razor。

 

     生成工程后,我们使用Sql Server 2005作为数据库提供源,然后ORM框架使用Linq,而不是常用的EF。这里主要是因为数据库会时常变化,EF要手动写数据类,相对来说有些麻烦,当然,很多场合EF更加方便些,这里不详述。在Models文件夹点右键添加新项,选择Linq To Sql,

如图示:

24

Linq的添加过程可见MSDN的LINQ部分

 

       此处添加了SQL中的两个表PerfUser和PerfScore,其中PerfUser的主键UserID是PerfScore的外键。其实在我接触的一些大项目中很多都不添加外键,数据表多了之后不仅关系混乱,而且表格之间的约束和级联会造成一些问题。在一些韩国公司开发的项目中,数据表之间的相互查询都是不定义外键,而是通过相同字段实现,类似于PerfUser和PerfScre中都有UserID字段,但是之间没有约束。(这只是个人看法^_^)

      然后在Models定义一个BoeUser Class,用来在View中展示数据或接收View的数据,如下:

   1: public class BoeUser
   2:     {                  
   3:         [Required]
   4:         [Display(Name="User ID")]
   5:         public string UserID { get;set;}
   6:        
   7:         public string UserName{get;set;}
   8:         public int  UserAuthority{get;set;}
   9:  
  10:         [Required]
  11:         [DataType(DataType.Password)]
  12:         [Display(Name="User Password")]
  13:         public string UserPwd { get;set;}
  14:  
  15:         [Display(Name = "是否作为管理员登陆?")]
  16:          public bool IsAdmin{get;set;}
  17:     
  18:     }

       其中[] 之间的都是声明相应的属性,如[Required]指该字段必须有,而Display表明该字段在View中对应控件显示的文字,DataType当然是说View控件的类型了,如Password 输入的文字会以粗圆点显示。

 

       Models完成后,然后看Controler,我们定义了BaseControler,用该类获得Model中的数据类,然后其他类继承该类得到各自所学的DataContext就可以了,子类中避免了重复多次获取DataContext。BaseControler如下:

   1: public class BaseController : Controller
   2:     {
   3:         private PerfDataDataContext _dataContext = null;
   4:         protected PerfDataDataContext DataContext
   5:         {
   6:             get
   7:             {
   8:                 if (_dataContext == null)
   9:                 {
  10:                     _dataContext = new PerfDataDataContext();
  11:                 }
  12:                 var option = new DataLoadOptions();
  13:                 option.LoadWith<PerfUser>(p => p.UserID);
  14:                 _dataContext.LoadOptions = option;
  15:                 return _dataContext;
  16:             }
  17:  
  18:         }
  19:  
  20:         protected PerfDataDataContext ScoreDataContext
  21:         {
  22:             get
  23:             {
  24:                 if (_dataContext == null)
  25:                 {
  26:                     _dataContext = new PerfDataDataContext();
  27:                 }
  28:                 var option = new DataLoadOptions();
  29:                 option.LoadWith<PerfScore>(p => p.ScoreID);
  30:                 _dataContext.LoadOptions = option;
  31:                 return _dataContext;
  32:             }
  33:         }
  34:     }

子类继承BaseController直接使用各自的DataContext即可。

       这里的Controller只有三个,分别是LoginController 、ScoreController、Admin/PerfManagerController。

       时间有限,剩下的Controller及View下篇细讲,请看我也发布一个MVC程序(二)

代码附上(基于Asp.net MVC 3 简单绩效考核系统,使用时请先用Sql Server附加DBData文件夹下的数据库,然后修改WebConfig下的数据库连接字符串)。

轻点这里下载

posted @ 2011-12-08 10:16  梦回千秋云断  阅读(1186)  评论(0编辑  收藏  举报