时隔多年又重新回到了这里,仿佛遇到了一个轮回。蓦然回首,15年开始对码农这个行业失望透顶,拿着4000多点工资没日没夜的写这各种增删改查,既没有精神上的成就感也没有物质上的满足,于是黯然退出了这个行业。5年过去了,历经各种磨难终于在这个远离家乡的城市里安家生存了下来,转眼间我自己的小孩也开始上学了。突然有一天我的小孩问:“爸爸你怎么不学习,我为什么做完作业以后还要学各种不同的东西?”。第一次遇到这种问题的时候顿时哑然,仔细回顾这几年工作之余干的最多的事情就是躺沙发上玩手机,确实也没有学习过额外的东西。好吧,为了能在家里营造一个好一点的学习氛围,想来想去还是重新拾起以前丢下的东西吧。由于以前一直在做客户端系统,网页端也是用的silverlight做的,所知道的web的只是也一直停留在使用webfrom拖控件的水平,于是乎就从头开始吧,新建了一个Asp.net Mvc的项目,准备做一个简单的用户权限管理的系统,边学边做吧。
MVC是Model(模型),View(视图),Controller(控制器)的简称,用于实现Web系统的分层。View是用来和用户交互的页面,Model用来存储或处理数据,Controllor用来接收View中的请求并从Model中的到数据返回给请求的View中。顺带提一下以前写项目的时候用的多层架构,也是将项目分为UI层,数据传输层(Model),业务逻辑处理层(BLL),数据交互层(DAL),感觉MVC和和这种分层模式类似。由于知识储备有限,目前我看到的区别就是webform访问一个页面的时候具体的指向到一个具体的页面,而MVC则指向一个路由,再由路按规则转发到Controller中具体的Action方法。
1、新建一个asp.net MVC项目,结构如图:
- Content 用来存放程序运行的时候所需要的静态的资源文件,如Css,或者你要使用到的UI框架。
- Controllers用来存放你的控制器类,创建控制器时默认以:控制器名称+Controller结尾。
- Script用来存放系统用到的javscript 文件,系统已默认添加了jquery 、bootstrap和jquery.validate等。
- Views 用来存放用户界面。
- Models用来存放程序中的核心类,也可以放到单独的一个项目中。
- Global.asax 包含了程序第一次启动时的初始化操作,如注册路由,注册过滤器,注册区域等。
2、右键点击Controllers文件夹,选添加→控制器→MVC5控制器空,输入控制器名称以Controller结尾,比如DefaultController。系统自动为我们在控制器中添加了一个名为Index的Action,在Index区域内任意位置点击右键→添加视图-→确定,系统会在Views文件夹
下创建一个和我们的Controller同名的Default文件夹,并创建一个Index.cshtml。我们再在刚创建的控制器里面添加一个名为Edit的Action,在Edit的区域内点右键添加视图,发现View/Default下又创建了一个Edit.cshtm。到这里就可以看出,Asp.net MVC里面的每个Action都对应着View中的一个页面(或者请求)。
3、Ctr+F5运行一下,发现报错了,出现了一个熟悉的黄页面,提示:未找到视图“Index”或其母版视图,或没有视图引擎支持搜索的位置。这是因为配置了默认路由的问题,在App_Start下找到RouteConfig.cs,将其修改为我们自己的控制器。如下:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }//controller 里面的Home修改成我们自己Default ); }
继续Ctr+F5运行,成功打开了。这里可以看出来,应用程序启动的时候默认调用了DefaultController中的Index方法。
4、Asp.net MVC的每个请求最终归结到Action上,Action再去向处理业务逻辑的方法去请求数据并返回给View。
5、再说下Views文件夹下的Shared文件夹。这里用来存储我们的视图模板,类似于webform的自定义控件的概念,用来定义一些我们在其他的视图页面中可以通用的东西,比如对js、css的引用。可以针对你的应用程序页面的不同风格,定义不同的布局样式,比如列表页,表单页,单页等不同的布局。在控制器中点右键添加视图的时候勾选使用布局样式就可以选择已经定义好的模板了。