SlideShare a Scribd company logo
1 of 22
ASP.NET MVC  培训 深圳市国泰安信息技术有限公司 Daniel Chow http://www.cnblogs.com/DanielChow
ASP.NET MVC 的基本概念 提 纲 基础介绍 HtmlHelper ,UrlHelper, Filter Url Routing and Test Tool Data Annotations and Validation Controller  和  View  之间的数据传输 ASP.NET MVC 生命周期 AJAX & Unobtrusive Javascript 问答 (QA)
ASP.NET MVC 的基本概念 MVC ( Model-View-Controller ,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型( Model ),视图( View )和控制器( Controller )。 MVC 本身是一种模式  , 它的核心思想是:把一个应用的输入、处理、输出流程按照 Model 、 View 、 Controller 的方式进行分离 我们今天讨论的 ASP.NET MVC , 是微软的一个开源产品 ,  后续的讨论基于 ASP.NET MVC 3.0 版本 .  在 ASP.NET MVC  中的 MVC  ,我的理解是一种表现层的 MVC 模式 , 也就是传统三层架构的 UI 层 .
[object Object],[object Object],[object Object]
 
ASP.NET MVC 生命周期
 
 
基础介绍 ,[object Object],1 、有两个视图引擎 ASPX  和 Razor ,  他们的区别在于 View 层的 Server side  代码写法不同, Razor 的写法更简洁和优雅,然后为了区分开他们的文件扩展名不同 . 2 、自定义 HtmlHelper: using System; using System.Collections.Generic; using System.Linq; using System.Web; using  System.Web.WebPages.Html; namespace  System.Web.Mvc { public   static   class   HtmlHelperExtensions { public   static   string   StyleText (this HtmlHelper htmlHelper ,  string text ,string styleName) { return string.Format(&quot;<span class='{1}'>{0}</span>&quot;, text, styleName); } } }
[object Object],他们的执行顺序请看 Demo
Controller  和  View  之间的数据传输 与传统 WebForm 差别较大 , 从生命周期图上就可以看出 ASP.NET MVC 提供两种传值方法: 1 、 TempData[“Test”]  一次性的只能传递到下一个 View 2 、 ViewData[“Test”]  3 、 ViewBag .Test  等价于  2 ,  写法不同而已  ,  看起来是强类型,其实是动态类型 Controller: ViewData[&quot;Test&quot;] = DateTime.Now.ToString(); TempData[&quot;TempTest&quot;] = DateTime.Now.ToString(); ViewBag.TestBag = DateTime.Now.ToString(); View(Razor): @ViewData[&quot;Test&quot;]<br /> @TempData[&quot;TempTest&quot;]<br /> @ViewBag.TestBag<br />
Data Annotations and Validation ,[object Object]
AJAX & Unobtrusive Javascript 当打开 ClientValidationEnabled  之后,会自动产生客户端验证代码 : 产生的代码分两种: 1 、基于 MicrosoftAjax 的,会在页面中产生相应的验证脚本 2 、基于 Jquery 的 Unobtrusive Script 方式进行验证  ,  需要打开 UnobtrusiveJavaScriptEnabled 验证的依据就是 View Model  上定义的约束 .  上一节提到的。 当然你还可以自己手写脚本进行验证。 Jquery AJAX  和  Controller  交付 : Controller: public ActionResult GetVersion() { var version = new {  Main = 6 , Second = 4, Fix = 3, Build = 235 }; return Json(version);//,JsonRequestBehavior.AllowGet);  }
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Url Routing and Test Tool ,[object Object],[object Object],[object Object],protected   void  Application_Start() { AreaRegistration .RegisterAllAreas(); // 注册所有的域 RegisterGlobalFilters( GlobalFilters .Filters); // 注册全局的 fileter RegisterRoutes( RouteTable .Routes); // 注册路由规则 //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);// 路由调试工具 } public   static   void  RegisterRoutes( RouteCollection  routes) { routes.IgnoreRoute( &quot;{resource}.axd/{*pathInfo}&quot; ); routes. MapRoute (   &quot;Default&quot; ,  //  路由名称 &quot;{controller}/{action}/{id}&quot; ,  //  带有参数的  URL new  { controller =  &quot;Home&quot; , action =  &quot;Index&quot; , id =  UrlParameter .Optional }  //  参数默认值 ); }
MapRoute(   string   name,   string   url); MapRoute(   string   name,   string   url,   object   defaults); MapRoute(   string   name,   string   url,   string []   namespaces); MapRoute(   string   name,   string   url,   object   defaults,   object   constraints); MapRoute(   string   name,   string   url,   object   defaults,   string []   namespaces); MapRoute(   string   name,   string   url,   object   defaults,   object   constraints,   string []   namespaces);  defaults 参数 :    url 参数的默认值 . 如果一个 url 只有 controller: localhost/home/   而且我们只建立了一条 url 获取数据规则 : {controller}/{action}   那么这时就会为 action 参数设置 defaults 参数中规定的默认值 . defaults 参数是 Object 类型 , 所以可以传递一个匿名类型来初始化默认值 : new   {   controller   =   &quot;Home&quot;,   action   =   &quot;Index&quot;   }   实例中使用的是三个参数的 MapRoute 方法 :        routes.MapRoute (          “ Default” ,                                 “ {controller}/{action}/{id}” ,                         new   {   controller   =   “ Home” ,   action   =   “ Index” ,   id   =   “”   }          );
constraints 参数 :   用来限定每个参数的规则或 Http 请求的类型 .constraints 属性是一个 RouteValueDictionary 对象 , 也就是一个字典表 ,  但是这个字典表的值可以有两种 :   用于定义正则表达式的字符串。正则表达式不区分大小写。   一个用于实现  IRouteConstraint  接口且包含  Match  方法的对象。   通过使用正则表达式可以规定参数格式 , 比如 controller 参数只能为 4 位数字 : new   {   controller   =   @&quot;{4}&quot;}     通过第 IRouteConstraint  接口目前可以限制请求的类型 . 因为 System.Web.Routing 中提供了 HttpMethodConstraint 类 ,  这个类实现了 IRouteConstraint  接口 .  我们可以通过为 RouteValueDictionary 字典对象添加键为 &quot;httpMethod&quot;,  值为一个 HttpMethodConstraint 对象来为路由规则添加 HTTP  谓词的限制 ,  比如限制一条路由规则只能处理 GET 请求 : httpMethod   =   new   HttpMethodConstraint(   &quot;GET&quot;,   &quot;POST&quot;   )   完整的代码如下 :        routes.MapRoute(          “ Default” ,                                  “ {controller}/{action}/{id}” ,                         new   {   controller   =   “ Home” ,   action   =   “ Index” ,   id   =   “”   },            new   {   controller   =   @“{4}&quot;   ,   httpMethod   =   new   ttpMethodConstraint(   &quot;GET&quot; ,   &quot;POST&quot;   )   }        );
路由规则多了之后很容易造成混淆,如何知道是被那一条路由规则被执行了呢? 这里介绍一个路由调试工具:  RouteDebug 使用很简单,添加引用然后  ,  Application_Start  中追加一行代码: RouteDebug. RouteDebugger .RewriteRoutesForTesting( RouteTable .Routes); // 路由调试工具 效果如下:
 
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
问答 (QA)& 资料推荐 ,[object Object],[object Object]
 

More Related Content

What's hot

香港六合彩
香港六合彩香港六合彩
LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHP
Lin Yo-An
 
Mastering Mustache
Mastering MustacheMastering Mustache
Mastering Mustache
tinyhill
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)
9scss
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
yiditushe
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
yiditushe
 

What's hot (20)

深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
ev2oik
ev2oikev2oik
ev2oik
 
LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHP
 
Node way
Node wayNode way
Node way
 
JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数JavaScript 闭包分享(一):传递参数
JavaScript 闭包分享(一):传递参数
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
Mastering Mustache
Mastering MustacheMastering Mustache
Mastering Mustache
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构
 
第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)第十期 阿甘Javascript开发思想(入门篇)
第十期 阿甘Javascript开发思想(入门篇)
 
Ejb工作原理学习笔记
Ejb工作原理学习笔记Ejb工作原理学习笔记
Ejb工作原理学习笔记
 
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
 
Js培训
Js培训Js培训
Js培训
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
Flex 4.5 action data communication
Flex 4.5 action data communicationFlex 4.5 action data communication
Flex 4.5 action data communication
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
 
J2ee经典学习笔记
J2ee经典学习笔记J2ee经典学习笔记
J2ee经典学习笔记
 

Similar to Asp.net mvc 培训

Ajax Transportation Methods
Ajax Transportation MethodsAjax Transportation Methods
Ajax Transportation Methods
yiditushe
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
aaveow
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
hua qiu
 
【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action
tbosstraining
 
Google App Engine Devfest 200810 External
Google App Engine Devfest 200810 ExternalGoogle App Engine Devfest 200810 External
Google App Engine Devfest 200810 External
junyu
 
HTML5 介绍
HTML5 介绍HTML5 介绍
HTML5 介绍
S S
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
QLeelulu
 
HTML5概览
HTML5概览HTML5概览
HTML5概览
Adam Lu
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
shaokun
 

Similar to Asp.net mvc 培训 (20)

Ajax Transportation Methods
Ajax Transportation MethodsAjax Transportation Methods
Ajax Transportation Methods
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Web base 吴志华
Web base 吴志华Web base 吴志华
Web base 吴志华
 
Ken20150313
Ken20150313Ken20150313
Ken20150313
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action
 
设计模式MVC
设计模式MVC设计模式MVC
设计模式MVC
 
Google App Engine Devfest 200810 External
Google App Engine Devfest 200810 ExternalGoogle App Engine Devfest 200810 External
Google App Engine Devfest 200810 External
 
HTML5 介绍
HTML5 介绍HTML5 介绍
HTML5 介绍
 
Cas Sso Intro
Cas Sso IntroCas Sso Intro
Cas Sso Intro
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
Jsp讲义
Jsp讲义Jsp讲义
Jsp讲义
 
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
 
Struts1+ hibernate3
Struts1+ hibernate3Struts1+ hibernate3
Struts1+ hibernate3
 
Jsp
JspJsp
Jsp
 
追风堂 Javascript
追风堂 Javascript追风堂 Javascript
追风堂 Javascript
 
HTML5概览
HTML5概览HTML5概览
HTML5概览
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
 

Asp.net mvc 培训

  • 1. ASP.NET MVC 培训 深圳市国泰安信息技术有限公司 Daniel Chow http://www.cnblogs.com/DanielChow
  • 2. ASP.NET MVC 的基本概念 提 纲 基础介绍 HtmlHelper ,UrlHelper, Filter Url Routing and Test Tool Data Annotations and Validation Controller 和 View 之间的数据传输 ASP.NET MVC 生命周期 AJAX & Unobtrusive Javascript 问答 (QA)
  • 3. ASP.NET MVC 的基本概念 MVC ( Model-View-Controller ,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型( Model ),视图( View )和控制器( Controller )。 MVC 本身是一种模式 , 它的核心思想是:把一个应用的输入、处理、输出流程按照 Model 、 View 、 Controller 的方式进行分离 我们今天讨论的 ASP.NET MVC , 是微软的一个开源产品 , 后续的讨论基于 ASP.NET MVC 3.0 版本 . 在 ASP.NET MVC 中的 MVC ,我的理解是一种表现层的 MVC 模式 , 也就是传统三层架构的 UI 层 .
  • 4.
  • 5.  
  • 7.  
  • 8.  
  • 9.
  • 10.
  • 11. Controller 和 View 之间的数据传输 与传统 WebForm 差别较大 , 从生命周期图上就可以看出 ASP.NET MVC 提供两种传值方法: 1 、 TempData[“Test”] 一次性的只能传递到下一个 View 2 、 ViewData[“Test”] 3 、 ViewBag .Test 等价于 2 , 写法不同而已 , 看起来是强类型,其实是动态类型 Controller: ViewData[&quot;Test&quot;] = DateTime.Now.ToString(); TempData[&quot;TempTest&quot;] = DateTime.Now.ToString(); ViewBag.TestBag = DateTime.Now.ToString(); View(Razor): @ViewData[&quot;Test&quot;]<br /> @TempData[&quot;TempTest&quot;]<br /> @ViewBag.TestBag<br />
  • 12.
  • 13. AJAX & Unobtrusive Javascript 当打开 ClientValidationEnabled 之后,会自动产生客户端验证代码 : 产生的代码分两种: 1 、基于 MicrosoftAjax 的,会在页面中产生相应的验证脚本 2 、基于 Jquery 的 Unobtrusive Script 方式进行验证 , 需要打开 UnobtrusiveJavaScriptEnabled 验证的依据就是 View Model 上定义的约束 . 上一节提到的。 当然你还可以自己手写脚本进行验证。 Jquery AJAX 和 Controller 交付 : Controller: public ActionResult GetVersion() { var version = new { Main = 6 , Second = 4, Fix = 3, Build = 235 }; return Json(version);//,JsonRequestBehavior.AllowGet); }
  • 14.
  • 15.
  • 16. MapRoute(   string   name,   string   url); MapRoute(   string   name,   string   url,   object   defaults); MapRoute(   string   name,   string   url,   string []   namespaces); MapRoute(   string   name,   string   url,   object   defaults,   object   constraints); MapRoute(   string   name,   string   url,   object   defaults,   string []   namespaces); MapRoute(   string   name,   string   url,   object   defaults,   object   constraints,   string []   namespaces); defaults 参数 :    url 参数的默认值 . 如果一个 url 只有 controller: localhost/home/   而且我们只建立了一条 url 获取数据规则 : {controller}/{action}   那么这时就会为 action 参数设置 defaults 参数中规定的默认值 . defaults 参数是 Object 类型 , 所以可以传递一个匿名类型来初始化默认值 : new   {   controller   =   &quot;Home&quot;,   action   =   &quot;Index&quot;   }   实例中使用的是三个参数的 MapRoute 方法 :        routes.MapRoute (          “ Default” ,                                 “ {controller}/{action}/{id}” ,                         new   {   controller   =   “ Home” ,   action   =   “ Index” ,   id   =   “”   }          );
  • 17. constraints 参数 :   用来限定每个参数的规则或 Http 请求的类型 .constraints 属性是一个 RouteValueDictionary 对象 , 也就是一个字典表 , 但是这个字典表的值可以有两种 :   用于定义正则表达式的字符串。正则表达式不区分大小写。   一个用于实现 IRouteConstraint 接口且包含 Match 方法的对象。   通过使用正则表达式可以规定参数格式 , 比如 controller 参数只能为 4 位数字 : new   {   controller   =   @&quot;{4}&quot;}     通过第 IRouteConstraint 接口目前可以限制请求的类型 . 因为 System.Web.Routing 中提供了 HttpMethodConstraint 类 , 这个类实现了 IRouteConstraint 接口 . 我们可以通过为 RouteValueDictionary 字典对象添加键为 &quot;httpMethod&quot;, 值为一个 HttpMethodConstraint 对象来为路由规则添加 HTTP 谓词的限制 , 比如限制一条路由规则只能处理 GET 请求 : httpMethod   =   new   HttpMethodConstraint(   &quot;GET&quot;,   &quot;POST&quot;   )   完整的代码如下 :        routes.MapRoute(          “ Default” ,                                  “ {controller}/{action}/{id}” ,                         new   {   controller   =   “ Home” ,   action   =   “ Index” ,   id   =   “”   },            new   {   controller   =   @“{4}&quot;   ,   httpMethod   =   new   ttpMethodConstraint(   &quot;GET&quot; ,   &quot;POST&quot;   )   }        );
  • 18. 路由规则多了之后很容易造成混淆,如何知道是被那一条路由规则被执行了呢? 这里介绍一个路由调试工具: RouteDebug 使用很简单,添加引用然后 , Application_Start 中追加一行代码: RouteDebug. RouteDebugger .RewriteRoutesForTesting( RouteTable .Routes); // 路由调试工具 效果如下:
  • 19.  
  • 20.
  • 21.
  • 22.