就在前两天,看到园子里一个哥们帮别人做个project,结果做了好久别人说不做了,正觉得那哥们冤的时候,没想到很快同样的事情便落在我身上,幸好我的东西只做了个开头,便被告知暂停,没有浪费太多的精力。废话不多说,我也上源码。
我做的是一个绩效考核系统,将代码传上来,只有简单的小框架,因为未完工,可能有点简单,勿喷
接触过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,
如图示:
Linq的添加过程可见MSDN的LINQ部分。
此处添加了SQL中的两个表PerfUser和PerfScore,其中PerfUser的主键UserID是PerfScore的外键。其实在我接触的一些大项目中很多都不添加外键,数据表多了之后不仅关系混乱,而且表格之间的约束和级联会造成一些问题。在一些韩国公司开发的项目中,数据表之间的相互查询都是不定义外键,而是通过相同字段实现,类似于PerfUser和PerfScre中都有UserID字段,但是之间没有约束。(这只是个人看法^_^)
然后在Models定义一个BoeUser Class,用来在View中展示数据或接收View的数据,如下:
1: public class BoeUser2: {
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 : Controller2: {
3: private PerfDataDataContext _dataContext = null;4: protected PerfDataDataContext DataContext5: {
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 ScoreDataContext21: {
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下的数据库连接字符串)。
轻点这里下载。