热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

ASP.NETMVC小结之基础篇(一)

本文是ASP.NETMVC系列的第一篇文章,跟其他学习系列一样,咱们先来点基础知识,之后再循序渐进。我们先从asp.netmvc的概念开始吧。

前言:前几天要准备一个演讲,所以准备了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以前的写法

代码如下:

             [HandleError]
        public class HomeController : Controller
        {
                   ......
        }

(2)3.0以后的写法:

代码如下:

            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }

新的ActionResult类型
(1) HttpNotFoundResult

     404

(2)RedirectResult

     302\301

(3)HttpStatusCodeResult

     自定义Http状态码

Model Validation
(1) 自验证

(2)客户端验证

     ->默认启用客户端验证

(3)远程验证

Razor视图引擎概述
(1) ASP.NET MVC 3自带了一下视图引擎

     1)ASPX

     2)Razor

(2)ASP.NET MVC 3支持多视图引擎机制

(3)可以在您指定的项目中自定默认的视图引擎

     1)MVC3中自由的上述引擎

     2)Spark

     3)Nhaml

     4)Ndjango

     5)自己定义的视图引擎

(4)Razor视图引擎是对以代码为焦点的方法实现

(5)特点

     1)简介,富于表现,流畅

            ->尽量减少编写一个视图模版所需要敲入的字符数,实现快速流畅的编程工作。

            ->不必为了明确标记出服务模块的开始和结束而中断编程,Razor解析器能从你的代码中自动推断出来

     2)易于学习

            ->熟悉现有的编程语言和HMTML技能就能快速学会

     3)可以在任何文本编辑器中工作

     4)VS2010对其增加了智能提示

     5)支持单元测试

(6)简介和流畅的对比

     1)ASPX引擎

                  


                              <%foreach(var p in products){%>
                                    
  • <%=p.Name%>($<%=p.Price%>)

  •                           <%}%>
                      

     2)Razor引擎

                  


                              @foreach(var p in products){
                                    
  • @p.Name($@p.Price)

  •                           }
                      

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

           1)ASPX引擎

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

           2)Razor引擎

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

      (2)渲染输出

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

                         1)ASPX引擎

                                <%:model.Message%>

                         2)Razor引擎

                                @model.Message

           2)未经HTML编码

                         1)ASPX引擎

                                <%=model.Message%>

                         2)Razor引擎

                                @Html.Raw(model.Message)

      (3)代码和标记混合

           1)ASPX引擎

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

           2)Razor引擎

                         @foreach(var item in items){
                                @item.Prop
                         }

      (4)代码和纯文本混合

           1)ASPX引擎

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

           2)Razor引擎

                         @if(foo){
                                Plain Text
                         }
                         @if(foo){
                                @:Plain Text
                         }

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

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

      (6)表达式与文本混合

             1)ASPX引擎

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

           2)Razor引擎

                         Hello @title.@name

      (7)Email地址

           1)hyl934532778@live.cn

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

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

                  I Hava A Dream,@@Kencery

      (9)显示渲染输出

                  1)ISBN@(isbnNumber)

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

      (10)服务器端注释

                  1)ASPX引擎

                         <%
                                I Have a Dream
                         %>

                  2)Razor引擎

                         @*
                                I Have a Dream
                         *@

      (11)渲染输出动态方法

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

                         @(MyClass.MyMethod())

      (12)创建Razor委托

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

      代码如下:

                         @{
                                Func b=
                                       @@item
                         }
                         @b("Bold this")

      (13)内容中混合代码

      代码如下:

                 

                           @foreach(var p in products){
                                 

      •                                  @p.ProductName
                                         @if(p.unitsInStock==0){
                                                @:(Out of stock)
                                         }
                                         else if(p.unitsInStock<4){
                                                @:(only @p.unitsInStock Left!)
                                         }
                                 

      •                    }
                   

      (14)多行内容的混合代码

                  1)内容在html标记闭合中时

      代码如下:

                         @if(p.unitsInStock==0){
                               


                                       Line one of Content
                                       Line two of Content
                                       Date is: @DateTime.Now
                                       Line four of Content
                               


                         }

      (15)多行内容混合代码

                  1)内容外部没有html标记包装时

                         1)@if(p.unitsInStock==0){
                                       @:Line one of Content
                                       @:Line two of Content
                                       @:Line four of Content
                         }

                         2)@if(p.unitsInStock==0){
                               
                                       Line one of Content
                                       Line two of Content
                                       Date is: @DateTime.Now
                                       Line four of Content
                               

                         }

      为什么需要布局页面
      (1) 没有使用布局页时,每个页面中将大量的重复我们的核心网站布局代码

           1)代码冗余

           2)不利于管理

           3)不利于后期的修改和维护

      Razor的布局
      (1) 不需要使用专门的.master文件,而统一使用.cshtml(VB中为.vbhtml)文件

           1)布局文件名通常采用类似_Layout.cshtml的名字

      (2)@RenderBody()用于标识布局页中可替换内容的主题部分

      (3)内容页中通过给页面的Layout属性赋值实现指定布局(模版)页的文件路径

      代码如下:

           @{
                  Layout="~/Views/Shared/_Layout.cshtml";
      }

      布局页的预设可布局区域
      (1) 通过使用@RenderSection在布局页中预设一些区域,用于在内容页中使用

           1)@RenderSection("head",false)

                  ->第一个参数是Section的名字

                  ->第二个尝试使用来设定是否为必须填充内容的区域

                  ->上述代码的含义是生命一个名字为head的非必需的内容区域

      (2)内容页中通过@section head{...}的方式向名为head的section中填充内容

      _ViewStart文件
      (1) 在项目项目\视图文件夹下添加一个名为

           _ViewStart.cshtml(或VB的_ViewStart.vbhtml)的文件

      (2)该文件用来定义想要在每次视图呈现开始时执行的通用视图代码,比如我们可以在该文件中声明默认的布局属性

      代码如下:

           @{
                  Layout = "~/Views/Shared/_Layout.cshtml";
           }

      (3)因为这段代码在每个视图开始的时候执行,我们不需要再任何单个视图文件中显示设置布局(除非我们想要覆盖上面的默认值).

      ASPX视图向Razor视图的转换
      (1) 手写一个文件一个文件的修改?

           1)坑爹啊

      (2)自己写代码用正则表达式转换??

           1)正则表达式功底不够好

      (3)那就用著名的telerick团队打造的RazorConverter吧!

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

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


推荐阅读
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 弹性云服务器ECS弹性云服务器(ElasticCloudServer)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境 ... [详细]
author-avatar
白斌童鞋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有