1.开始学习ASP.NET MVC
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的第一篇就结束了,大家有什么疑问,欢迎留言评论。
上一篇: Java学习:注解,反射,动态编译
推荐阅读
-
基于ASP.NET MVC的ABP框架入门学习教程
-
基于ASP.NET MVC的ABP框架入门学习教程
-
详解ASP.NET Core MVC 源码学习:Routing 路由
-
Asp.Net MVC学习总结之过滤器详解
-
详解ASP.NET Core MVC 源码学习:Routing 路由
-
《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式
-
ASP.NET MVC3学习心得-----视图和模型
-
学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC路由(三)
-
ASP.NET MVC5 高级编程-学习日记-第二章 控制器
-
ASP.NET MVC学习之路由篇(3)