很早之前在项目中使用的软件架构模式,一直想着写一写加深自己对它的理解。但总是一天拖着一天,趁着现在闲,跟大家唠唠嗑这个东西。

首先什么是 MVC(Model-View-Controller) 呢?不得不说这是一个有情怀的思想,它把前后端的代码进行一次极大的解耦。当然这跟我们平常见到的三层是两个完成不一样的概念,它只对 UI 层的一种优化。

我们先来看看它长什么样的吧。

附图 MVC 简单模型:(其实它长的很简单有木有?能看还实用)

根据这个模型你大概就能知道 MVC 其实说白了就是把前后端给分离出来了,后台代码直接存放到 Controller 中,然后通过 Model 来进行数据的传递,前台接收到请求后通过 View 展示出来。

接下来我们通过 Visua Studio 2012 创建一个 MVC 3 的实例让您有更深刻的理解:

1.在 Visual C#  ->  Web 选择ASP.NET MVC 3 Web 应用程序

2.在进行这一步选择之前我们来了解下项目模板。从下图可看出有3个默认的模板,空模板 / Internet 应用程序 / Intranet应用程序 。

   1.空模板:创建完之后就是个空的 ASP.NET MVC 3 项目。

   2. Internet 应用程序:生成之后会自动帮我们创建一些文件,如 Home / Index 等

   3. Intranet 应用程序:跟 Internet 应用程序最大的区别就是一个是互联网而它是物联网,这当中有一个域的概念。今天聊的话题不是这个,暂不深究

这里我们选择 Internet 应用程序模板(这里我把这个窗体分为3个部分,模板 / 引擎 / 测试单元)

接下来是视图引擎的选择, MVC 给我们提供了2个视图引擎 Razor 和 ASPX 。那视图引擎是用来做什么的呢?这边我想您应该联想到了 View 。我们通过之前的 MVC 模型图可知道 View 在拿到数据后会把数据展现给用户,那是通过什么样的办法来展示给用户呢?渲染引擎,比如您在玩游戏的时候有的游戏会要求安装一个 DirextX 这种东西,它的功能就是要硬件加速,方便以视图的方式更快的渲染出来。而 View 的渲染引擎也是同个道理。那么在这里我们就选择 Razor 来当我们的视图引擎,和 ASPX 视图引擎的最大的明显区别就是 Razor 渲染出来的页面后缀是 .cshtml 而 ASPX 视图引擎则就是我们经常见到的 .aspx 页面。

这里顺便提一下第3个模块 创建单元测试项目 ,顾名思义就是可以为其创建一个测试单元。 今天的话题是初始 MVC ,就不聊这个测试的事了。

最后直接点确定,开始生成我们的第一个 MVC Demo ,画红框的就是生成之后的 MVC 结构中最核心的3个文件夹。其他的文件目录基本都是一些资源文件了。

其次比较值得介绍的当然是 Global.asax 文件了,它是一个解析文件。主要用于解析 HttpApplication 这一个类,总的来说所有的解析都会通过 MvcApplication 来完成解析。也就是说,当客户端发请求过来后,最先交给 MvcApplication ,它来决定调用某个 Controller 的某个 Action。

开始编译浏览下我们第一个 MVC 网站:

这里就会产生一个新的困惑,这个地址 http://localhost:23347/ 为什么没有特意指向某个地址就能访问到这个页面呢?实际上这个请求发起的过程中,URL 地址便省略一部分地址了,实际上的地址应该是:

http://localhost:23347/home/index ,而 /home/index 拆分出来,/home 对应的其实就是目录中的某个 Controller ,而 index 则就是对应 Controller 的某个Action

我和ASP.NET MVC有个约会的更多相关文章

  1. ASP.NET MVC 4 (十) 模型验证

    模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验 ...

  2. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  3. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  4. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  5. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  6. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合

    今天为大家分享下 Asp.net MVC 将数据从前台传递到后台的几种方式. 环境:VS2013,MVC5.0框架 1.基本数据类型 我们常见有传递 int, string, bool, double ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  8. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航

    ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...

  9. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

随机推荐

  1. Android——service重启

    一.在application中注册消息监听 public class BackgroundServiceApplication extends Application { @Override publ ...

  2. Colour your Log4Net events in your RichTextBox zz

    You’re most probably here because you have already read my article How to watch your log through you ...

  3. HDU-1395 2^x mod n = 1

    http://acm.hdu.edu.cn/showproblem.php?pid=1395 怎样取余是关键.. 2^x mod n = 1 Time Limit: 2000/1000 MS (Jav ...

  4. MonkeyRunner执行Python脚本实例——发送短信增强版

    很久之前就写好的了,准备写个自动执行Monkey的脚本时才想到去找它,还是写在博客里找起来方便. 这次更新了批处理自动连接设备后执行Py脚本,结构如下图: 其中shotscreen为存放截图文件夹,s ...

  5. sql server 是否存在内存表?

    最近开发有个需求,需要使用到函数,但是函数中需要使用case when 判断分支,其实可以放到一张表中读取分支:但是物理表需要I/O开销,几十W的数据,线上开销也是很大的,所以就想sql server ...

  6. 16位cpu下主引导扇区及用户程序的编写

    一些约定 主引导扇区代码(0面0道1扇区)加载至0x07c00处 用户程序头部代码需包含以下信息:程序总长度.程序入口.重定位表等信息 用户程序 当虚拟机启动时,在屏幕上显示以下两句话: This i ...

  7. 将多个Sheet导入到同一个Excel文件中

    实体类excel import java.util.List; /** * 功能: * 描述: * @author * @date 2015-3-19 下午5:15:48 */ public clas ...

  8. 《神经网络和深度学习》系列文章十二:Hadamard积,s⊙t

    出处: Michael Nielsen的<Neural Network and Deep Learning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR本科生 王宇轩 ...

  9. python 基础干货 01

    赋值的实现 a = 'abc' 1. 在内存中创建了'abc'字符串; 2. 在内存中创建了一个名为 a 的变量, 并把它指向刚才创建的'abc', 也就是a中保存着字符串的地址. b = a, 创建 ...

  10. .net core 使用DES加密字符串

    找了很久,都是用的第三方的插件处理,但是第三方的插件不兼容.net core中内置包. 接下来分享自己的方法: 1.创建一个加密方法类:SecurityHelper. public class Sec ...