Asp.net MVC项目默认会引用很多第三方插件,特别是现在的5.0,默认示例项目就几十M,搞得都不知道那些才是MVC必须的,是重点,那些是可有可无的。
今天我们就来试验一下,看看一个最小的MVC工程都需要那些东西。当然,为了试验,我们就不用VS自带的新建MVC工程,而是自己用一个普通的Web应用程序来搭建一个MVC项目,一层层揭开MVC的神秘面纱。
下面的示例工程用的是VS2013,其它版本可能有些不同,但道理都是一样的。
 
第一篇,建一个最小的MVC工程。

第一步,打开VS2013,新建一个项目

第二步,新建一个asp.net Web应用程序

第三步,选择空模板,WebForms、MVC、Web API都不选,无身份认证。上面几步,在VS2010或2012的直接建一个空的Web 应用程序就行。

建好后的工程像这样的,什么都没有。

第五步,在项目上右键,单击管理NuGet程序包,打开NuGet(vs2010略有些不同)。
使用NuGet安装MVC是为我获取我们需要的文件,不是必须的,本示例中只会使用System.Web.mvc.dll。如果不用GuGet下载的话,你也可以去别的地方下载相应的程序集,记住自己引用的版本,后面会有些配置文件配置。
第六步,联机搜索asp.net mvc,搜到后安装,什么版本都可以,这里安装的是5.0版本。

接受

5.0的MVC默认会安装这些东西。

比刚才多出了7个引用。

第七步,将除System.Web.Mvc外的其它6个删除,在项目根目录下建立Controllers、Models、Views三个文件夹。

第八步,为项目添加一个全局应用程序(Global.asax),添加上面圈的那句代码和外用。

第九步,在Controllers目录下添加一个名为HomeController的类。选引入System.Web.mvc命名空间,让HomeController类继承Controller类,添加一个Index的方法,代码如图。
注意,这时VS2013已经可以添加控制器了,VS2010没有,但我们是为了试验,所以是添加一个类,不是添加一个控制器
第十步,在Views目录下建一个Home目录,再在Home目录下面建一个Index.aspx的Web窗体,删除Web窗体的后置代码文件,只保留Index.aspx文件,更改代码如图所示。

第十一步,打开Global.asax文件,为当前项目添加一个默认的路由,如图红圈内代码。

第十二步,运行代码,OK。
 
通过上面的实验,我们可以看到,其实Mvc和传统的Web 应用程序并没有任何不同,就是多引入了些程序集而已,核心的程序集只有一个System.Web.mvc.dll。只是在VS中,特别是VS2010中,直到最后项目能正常跑起来了,还是无法通过右键菜单添加控制器或视图,感觉好像是两个不同的东西样。但在VS2013中,算是回归本质了,你就算建一个Web窗体应用程序工程,只要引入了System.Web.mvc.dll,就可以享受和MVC工程一样的右键菜单了。

 

2014-01-15补充

其实上面的项目还不是最小的MVC项目,还可以去掉一部分。具体操作是:

1.删除全局应用类下的AreaRegistration.RegisterAllAreas();

2.删除Models和Views文件夹及下面的文件。

3.更改Home控制器的Index方法返回值类型为string,方法体直接返回一个字符串就行。

这时再运行项目,浏览器会输出你在Index方法中返回的字符。到此,我想才是最小的MVC项目吧(连Models和Views都没有了,直接叫asp.net c了,其实Controllers文件夹也可以不要),还有更精简的么,有的话留言告诉我。

现在看来,一个普通项目要想变成支持MVC的项目,只需做3件事,1.引用System.Web.mvc.dll 2.新建一个以Controller结尾的类,继承System.Web.mvc.Controller类。3.在应用程序启动时注册一个默认的MVC路由即可。

asp.net mvc笔记一,最小的MVC工程的更多相关文章

  1. ASP.NET学习笔记1—— MVC

    MVC项目文件夹说明 1.App_Data:用来保存数据文件 2.App_Start:包含ASP.NET-MVC系统启动的相关类文件 3.Controllers:存放整个项目"控制器&quo ...

  2. ASP.NET MVC 笔记

    (从今天开始,还是换回默认的代码高亮插件吧...话说此篇仅供个人遗忘后查阅,木有详尽解释...) 1.Controller中的所有Action方法不限制返回值类型,返回值应该至少可以被ToString ...

  3. 最小的MVC工程

    asp.net mvc笔记一,最小的MVC工程   Asp.net MVC项目默认会引用很多第三方插件,特别是现在的5.0,默认示例项目就几十M,搞得都不知道那些才是MVC必须的,是重点,那些是可有可 ...

  4. 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考

    先看我对REST的一点认识,下面是<rest实战> 这本书的序言文字:      在我刚刚开始从事解决计算问题的时候,业界就有很多人有一个愿望:将系统设计为能够被自由组合的组件.互联网(I ...

  5. MVC笔记

    简要论述对MVC模式的理解,并简述ThinkPHP中的MVC模式是如何运行的 MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征.这种抽象结构能有助于将应用 ...

  6. 像asp.net Mvc一样开发nodejs+express Mvc站点

    像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angu ...

  7. angular学习笔记(3)- MVC

    angular1学习笔记(3)- MVC --- MVC终极目标 - 模块化和复用 AngularJs的MVC是借助于$scope实现的!!! 神奇的$scope: 1.$scope是一个POJO(P ...

  8. 005. Asp.Net Routing与MVC 之三: 路由在MVC的使用

    上次讲到请求如何激活Controller和Action,这次讲下MVC中路由的使用.本次两个关注点: 遗留:ModelBinder.BindModel的过程 MVC中路由的使用 MVC 5中的Acti ...

  9. 《ASP.NET MVC企业实战》(三)MVC开发前奏

    ​ 在上一篇“<ASP.NET MVC企业级实战>(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性.本篇继续以这样的方式来学习C#中的一些特性.   一.C#3. ...

随机推荐

  1. player.swf播放flv方式

    <embed src="../images/player.swf" allowFullScreen="true" quality="high&q ...

  2. JMeter HTTP Cookie管理器的跨域使用

    Jmeter的一个测试计划只能有一个cookie管理器,当多个manager同时存在时,无法指定是用的哪一个manager.如果想让cookie manager跨域使用,修改JMeter.proper ...

  3. nginx 配置rewrite 笔记

    nginx 配置rewrite笔记: 通过下面的示例来说明一下,1. 先说说location : location 表示匹配传入的url地址,其中配置符有多种,各种情况的意义不一样: location ...

  4. Code::Blocks配置GTK+2和GTK+3

    Code::Blocks配置GTK+2和GTK+3 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根 ...

  5. 如何实现:录制视频聊天的全过程? 【低调赠送:QQ高仿版GG 4.3 最新源码】

    前段时间做个项目,客户需要将视频对话的整个过程录制下来,这样,以后就可以随时观看.想来录制整个视频聊天的过程这样的功能应该是个比较常见的需求,比如,基于网络语音视频的1:1的英语口语辅导,如果能将辅导 ...

  6. MySQL中VARCHAR与CHAR格式数据的区别

    区别 CHAR与VARCHAR类型类似,但它们保存和检索的方式不同.CHAR有固定的长度,而VARCHAR属于可变长的字符类型.它们最大长度和是否尾部空格被保留等方面也不同.在存储和检索过程中不进行大 ...

  7. Linux及文件系统基本介绍

    Linux及文件系统基本介绍 1   互联网行业现状 在服务器端市场: 超级计算机 2014年11月的数据显示前500系统中的485个系统都在运行着 Linux 的发布系统,而仅仅只有一台运行着 Wi ...

  8. IE浏览器不能自动显示PDF文件的解决办法

    今天更新了Adobe的PDF Reader,更新后发现在网页上无法预览PDF文件了,点击PDF的连接,浏览器就会提示下载或者打开,感觉很不爽,经过一番百度,找到了解决办法,在这里分享一下. 打开IE浏 ...

  9. HTML5文件上传插件 Huploadify V2.1发布

    月初发布了HUploadify2.0版本,增加了文件的断点续传功能,得到了不少朋友的好评.本着按照Uploadify原样复制的原则,本次在一些朋友的建议中采纳了几点,做了一次较小的改动,定为2.1版本 ...

  10. 图文详解Unity3D中Material的Tiling和Offset是怎么回事

    图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...