ASP.NET MVC小结之基础篇(一)


前言:前几天要准备一个演讲,所以准备了MVC的一些基本的东西,以前也使用过MVC,但是只是使用,而不是去了解,所以趁着这个机会好好的把别人的MVC视频看了一下(是一个微软的MVP会员发布的视频,相信有些人都看过),整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西。本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章!

什么是ASP.NET MVC
(1) ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架

(2)MVC是微软继ASP.NET WebForms后的有一种开发方式,并非替代方式!

(3)官方网站:http://www.asp.net/mvc

(4)源码网站:http://aspnet.codeplex.com/wikipage?title=MVC

ASP.NET MVC的特点
(1) 分离任务,耦合度很低

(2)可扩展能力很高

(3)强大的URL重写(路由)机制

(4)兼容ASP.NET现有的技术

(5)开源

ASP.NET MVC的优点
(1) 通过把项目分为MOdel,View和Controller,使得复杂项目更加容易维护

(2)没有使用ViewState和服务器表单控件,可以更加方便的控制应用程序的行为(可以说回归了原始状态)

(3)应用程序通过Controller来控制程序请求,可以提供丰富的url重写

(4)支持测试驱动开发

(5)在团队模式下表现得更加出众

为什么我们需要ASP.NET MVC
(1) 关注点分离

(2)高可扩展性

(3)更好的可测试性

(4)更好的URL重写

(5)更好的性能

(6)更加灵活的HTML代码控制

ASP.NET MVC1
(1) 经过漫长的Preview和2个RC版本后,2009年3月,微软正式发布了ASP.NET MVC1

(2)这时微软官方在MVC领域的第一个WebApplication框架,带来了与WebForm几乎不同的开发理念

(3)但由于某些原因该版本缺失了Area等关键技术点,以至于用该版本开发复杂的MVC Web应用时会有诸多困难

ASP.NET MVC2
(1)在1.0发布后不到1年时间,ASP.NET MVC2正式发布

(2)2010年4月12日发布了VS2010和Visual Web Developer 2010正式版中内置了对ASP.NET MVC2的扩展

(3)ASP.NET MVC2该我们带来了众多期待已久的功能:如:强类型的HTML Helper,数据验证,自定义模版,Area,异步Controller等等

(4).NET 4的新技术,也给ASP.NET MVC2应用开发带来了一些不错的新体验,如:dynamic类型,带有默认值得方法参数等。

为什么需要ASP.NET MVC3?
(1) ASPX视图中充斥着<%...%><%...%><%...%>

(2)Action过滤器无法全局

(3)对404,301,302等的http响应状态,缺乏对应的ActionResult类型

(4)缺乏模型(Model)数据验证的直接支持

(5)对依赖注入(DI),控制反转(IoC)支持不够好

(6)不支持Grid

(7)ViewData用起来有些麻烦(使用dynamic类型替代)

ASP.NET MVC3
(1) 增加Razor视图引擎;支持多视图引擎

(2)全局的Action过滤器

(3)新的ViewBag属性(dynamic类型),原来是ViewData

(4)新的ActionResult类型

(5)Model Validation(Model的验证)

(6)JSON绑定支持

(7)dependency Injection(注入依赖)

(8)HTML5,CSS3

(9)部分也的输出缓存

(10)HtmlHelper的增强

(11)NuGet(VS2010环境继承的)

Razor视图引擎
(1) 使用@代替<% %>

     1)语法简单清晰

     2)容易学习

     3)VS2010智能提示和语法着色

(2)全局设定默认布局等项目

全局的Action过滤器
(1) 3.0以前的写法

$@p.Price)</li>
                          }
                   <ul>

伟大的@
(1) Razor中服务器端代码段的起始位置均使用@符号作为开始

     1)ASPX引擎

                   <%
                          int x=12;
                          string name="韩迎龙";
                   %>

     2)Razor引擎

                   @{
                          int x=12;
                          string name="韩迎龙";
                   }

(2)渲染输出

     1)经过HTML编码(放置被攻击)

                   1)ASPX引擎

                          <span><%:model.Message%></span>

                   2)Razor引擎

                          <span>@model.Message</span>

     2)未经HTML编码

                   1)ASPX引擎

                          <span><%=model.Message%></span>

                   2)Razor引擎

                          <span>@Html.Raw(model.Message)</span>

(3)代码和标记混合

     1)ASPX引擎

                   <%foreach(var item in items){%>
                          <span><%:item.Prop%></span>
                   <%}%>

     2)Razor引擎

                   @foreach(var item in items){
                          <span>@item.Prop</span>
                   }

(4)代码和纯文本混合

     1)ASPX引擎

                   <%if(foo){%>
                          Plain Text
                   <%}%>

     2)Razor引擎

                   @if(foo){
                          <text>Plain Text<text>
                   }
                   @if(foo){
                          @:Plain Text
                   }

(5)<text>标签式一个Razor特殊处理的元素,Razor将<text>块内部内容视为内容块,不呈现包含那些内容的<text>标签

            (这意味着只呈现<text>内部内容,不呈现标签本身)。这使呈现没有被HTML元素包装的多行内容块变得方便

(6)表达式与文本混合

       1)ASPX引擎

                   Hello <%:title%>.<%:name%>

     2)Razor引擎

                   Hello @title.@name

(7)Email地址

     1)hyl934532778@live.cn

                   Razor可以自动识别Email地址而不作为服务器端代码执行

(8)两个连续的@@符号会被渲染成一个@符号

            <span>I Hava A Dream,@@Kencery </span>

(9)显示渲染输出

            1)<span>ISBN@(isbnNumber)</span>

            2)当要渲染输出的代码@前无空格或标记位时,我们需要使用小括号继续您显示的渲染输出

(10)服务器端注释

            1)ASPX引擎

                   <%
                          I Have a Dream
                   %>

            2)Razor引擎

                   @*
                          I Have a Dream
                   *@

(11)渲染输出动态方法

            1)对于动态方法返回值之类的输出我们使用小括号将代码闭合起来即可

                   @(MyClass.MyMethod<AType>())

(12)创建Razor委托

            1)我们通过创建Razor委托来复用一些视图逻辑

https://github.com/telerik/razor-converter

相信自己,也许你就是下一个奇迹


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3