Hello, 大家好! 好久没有开始记录博客了, 是时候开始分享一下了, 这个系列主要为零基础的同学, 量身打造的. 废话不多说, 我们开干!
什么是 ASP.NET MVC
MVC(Model-View-Controller)--[模型 -- 视图 -- 控制器], 是一种设计模式, 它将一个应用程序拆分成下面三个主要的组件:
- Model(模型)
- View(视图)
- Controller(控制器)
ASP.NET MVC 框架提供了相对 ASP.NET web Forms 创建 Web 应用程序的另外一种选择. ASP.NET MVC 框架是一个轻量级的, 高度可测试的 Web 框架, 它和 Web Form 一样, 集成在现有的 ASP.NET 特性中, 例如: 母版页, Membership 授权验证. ASP.NET MVC 框架定义在 System.Web.Mvc 程序集中, 提供了对 html,JavaScript 和 CSS 的完全控制权. 对于大型开发团队来说, 推荐使用 ASP.NET MVC 进行团队开发协作.
MVC 设计模式
基于 MVC 模式的 Web 应用程序的优点
ASP.NET MVC 框架有以下优点:
通过将应用程序拆分为 Model,View,Controller, 对复杂性易于管理;
不使用 ViewState 或者服务器端的控件;
对 HTML,JavaScript 和 CSS 拥有完全控制权;
更好的支持测试驱动开发[Test-Driven Development(TDD)] ;
非常适合对应用程序有着高度控制需求的 Web 设计人员;
默认支持 Facebook 和谷歌的授权验证;
通过使用多个 Areas, 可以很容易管理大型应用程序;
ASP.NET MVC 引用了哪些命名空间
System.Web.Mvc
System.Web.Mvc 命名空间中, 包含支持 MVC 模式的类和接口. 这个命名空间包含: 控制器类, 控制器工厂类, ActionResult 类, 视图, 分布视图以及模型绑定类等.
System.Web.Mvc.Ajax
包含在 ASP.NET MVC 应用程序中支持的 Ajax 脚本, 这个命名空间包含支持 Ajax 脚本和 Ajax 选项的设置.
System.Web.Mvc.Async
包含在 ASP.NET MVC 应用程序中支持异步操作的类和接口.
System.Web.Mvc.HTML
包含在 ASP.NET MVC 应用程序中渲染 HTML 控件的类. 这个命名空间包含支持表单 (forms), 输入控件(input controls), 超链接(links), 分布视图(partial views) 以及验证的类.
ASP.NET MVC 和 ASP.NET Web Forms 的不同点
ASP.NET Web Forms | ASP.NET MVC |
Web Forms 使用 Code behind 技术,将页面分成两部分 【.aspx 文件 (用来呈现视图),.aspx.cs 或者 aspx.vb(用来编码)】 | ASP.NET MVC web 应用程序是一个 设计模式,它将应用程序划分成三个部分: 模型、视图、控制器。 |
ASP.NET Web Forms 有服务器端控件 | ASP.NET MVC 有 HTML 帮助类 |
ASP.NET Web Forms 支持 ViewState 用于在客户端进行状态管理。 | ASP.NET MVC 不支持 ViewState |
ASP.NET Web Forms 模型遵循一个 页面的生命周期。 | 没有像 Web Forms 那样的页面生命 周期,在 ASP.NET MVC 模型中,请求周期很简单. |
在许多情况下,对 HTML,JavaScript 和 CSS 的控制有限。 | 对 HTML,JavaScript 和 CSS 完全控制 |
它适用于小型团队开发。 | ASP.NET MVC 是在大型应用程序中, 各个团队协作开发中推荐的框架 |
ASP.NET MVC 应用程序解决方案
一个 ASP.NET MVC 应用程序被划分到三个文件夹中: Model,View,Controller, 当然我们还有其他文件夹用来放置脚本文件, 以及 App_Start 文件夹等.
1.Model[模型]
模型是用来存放由 LINQ to SQL 创建的类或者 EF 创建的类, 又或者是存放 WCF 服务的引用, 又或者是其他. 最终我们只是使用这个模型, 在视图中呈现数据.
2.View [视图]
视图文件夹用于存放特定控制器对应的视图页或者局部页, 通常 View 文件夹会包含一个 Shared 文件夹, 在 Shared 文件夹中, 我们可以存放可以在任何控制器中使用的页面或者用户控件. 来自控制器的每个请求, 同样会检查 Shared 文件夹中页面的扩展名.
3.Controller[控制器]
控制器就是用来存放业务逻辑类, 每一个控制器类都是 System.Web.Mvc.Controller 类的子类. 控制器类仅仅是包含一些方法, 用来返回一个视图, 分布视图, Content,JSON 数据以及其他的.
Actions [方法]
Actions 是一类拥有特别返回值类型的方法, 用来编码以完成特定的任务, 它同样也向用户返回一些东西[例如: 视图页面, 分布视图页面(用户控件)] . 每一个 Action 都可以处理两种类型的 Http 请求.
1.[HttpGet]
HttpGet 标识的方法, 用于处理直接来自用户的操作, 我们还可以这样说: HttpGet 用于处理第一次请求这个方法的时候.
2.[HttpPost]
HttpPost 标识的方法, 是在客户端已经存在视图页面的时候, 用户点击 HTML 表单中的提交按钮的时候被调用的. 点击按钮的时候, 同样返回了所有在表单中的控件值, 这些值在 FormCollection 类型的对象中.
一个 Action 方法, 可能有多种返回值类型. 我们可以返回多种类型的返回值给用户, 但是大多数的时候, 还是使用 ActionResult, 因为它是其他类型的父类.
ActionResult 是一个抽象类, 它有多种子类:
ASP.NET MVC 中的 Areas
从 ASP.NET MVC 2.0 开始, 微软提供了一个新的特性: Areas.Areas 仅仅是用来划分或者分离大型应用程序为多个或者单独的 MVC.
当你向项目中添加一个 Area 的时候, 一个为 Area 定义的路由, 就在 AreaRegistration 文件中定义了. 路由基于请求的 URL 向 Area 发送请求. 为了注册 Area 的路由, 在 Global.asax 文件中写入注册代码:
AreaRegistration.RegistrAllAreas();
MVC 应用程序请求的生命周期
在 MVC 应用程序中, 没有像 ASP.NET Web Forms 那样的页面生命周期, 但是我们有 MVC 请求的生命周期.
在 MVC 应用程序中, 当用户通过浏览器发送一个请求的时候, 就会被 IIS 处理, 这个请求的 URL 就像下面这样:
http:// 主机名 / 控制器名称 / Action 方法名 / ID
在上面的请求图中, 我仅仅只是描述了两种类型的用户请求.
1. 第一种请求是: 返回一个视图, 没有对模型数据进行请求. 这个时候是用户发送一个请求, 被 MVC 处理程序处理, 然后直接到到控制器, 然后调用控制器的某个 HttpGet 特性标识的方法中, 然后返回一个 ViewResult 实例, 然后找到相应的视图页面, 视图引擎就渲染视图页面, 呈现给用户 HTML 页面.
2. 第二种请求类型是, 用户请求一个 View+data 模式, 也就是说用户发送一个请求, 被 MVC 处理程序处理, 然后找到控制器中相应的 HttpGet 特性标识的方法. 如果这个方法返回: 一个带有 Model 对象的 ViewResult, 那么它就会先去请求 Model 类, 然后返回一个带有 ModelObject 的 ViewResult, 然后我们就可以在视图中进行绑定呈现了.
这里有两种类型的模型视图绑定:
1.Dynamic Banding [动态绑定]
动态绑定是当我们向 ViewResult 传递一个对象的时候, 用于返回视图的时候, 却没有在视图中定义对象的类型, 这个时候, 我们还是可以使用对象属性赋值, 但是这时候是没有 Visual Studio 智能提示, 我们写的动态语句, 只有在运行的时候, 才看的到效果.
2. Strong typed binding[强类型绑定]
强类型绑定是当我们向 ViewResult 传递对象, 用于返回视图的时候, 就已经在页面中定义了对象的类型, 然后我们就可以在页面中安全的使用对象了, 这个时候是有智能提示的.
View Engines [视图引擎]
视图引擎主要是用于向浏览器呈现 HTML 页面, 视图引擎模板有不同的语法实现, 当前主流的是 Razor, 此外还有 ASPX. 当然 ASP.NET 同样支持一些第三方的视图引擎, 例如: Spark,NHaml.
ASPX
ASPX 是最早的 ASP.NET MVC 应用程序视图引擎, 语法类型 ASP.NET Web Forms. 我们使用 "<%:%>" 来写一些服务端的代码, 视图文件的扩展名和 ASP.NET 也一样.
1. .aspx: .aspx 是视图页面的扩展名, 和 ASP.NET Web Forms 一样
2. .ascx: .ascx 是分布视图的扩展名, 类似 ASP.NET Web Forms 中的用户控件
3. .master: .master 扩展名的文件就是母版页和 ASP.NET Web Forms 中母版页一样.
Razor
Razor 视图引擎是更高级的视图引擎, 是从 MVC 中第一次出来的, Razor 视图引擎使用 "@" 符号代替 "<%:%>", 并且 Razor 不需要你明确的去关闭代码块. 视图引擎在运行的时候, 智能的判断什么哪里呈现标签元素, 哪里是代码块.
Razor 视图引擎是 MVC 3.0 ,MVC 4.0 以及 MVC 5.0 中的默认视图引擎, 对于 C#/VB 来说, 我们有两种页面的扩展名.
C# 语言对应的是:.cshtml
VB 语言对应的是:.vbhtml
到此为止, 我们从零开始系列学习 MVC 的第一篇就结束了, 大家有什么疑问, 欢迎留言评论.
来源: https://www.cnblogs.com/caofangsheng/p/10440900.html