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以前的写法

代码如下:

[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引擎

<ul>
                          <%foreach(var p in products){%>
                                 <li><%=p.Name%>($<%=p.Price%>)</li>
                          <%}%>
                   </ul>

2)Razor引擎

<ul id="products">
                          @foreach(var p in products){
                                 <li>@p.Name($@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委托来复用一些视图逻辑

代码如下:

@{
                          Func<dynamic,object> b=
                                 @<strong>@item</strong>
                   }
                   @b("Bold this")

(13)内容中混合代码

代码如下:

<ul>
                   @foreach(var p in products){
                          <li>
                                 @p.ProductName
                                 @if(p.unitsInStock==0){
                                        @:(Out of stock)
                                 }
                                 else if(p.unitsInStock<4){
                                        @:(only @p.unitsInStock Left!)
                                 }
                          </li>
                   }
            </ul>

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

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

代码如下:

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

(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){
                          <text>
                                 Line one of Content
                                 Line two of Content
                                 Date is: @DateTime.Now
                                 Line four of Content
                          </text>
                   }

为什么需要布局页面
(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

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

(0)

相关推荐

  • ASP.NET 2.0 程序安全的基础知识

    成员关系的概念在人类社会中是一个层次比较低的概念,源于希望属于某个群组的意识.我们希望能觉得自己是某个团队的一部分,让别人知道我们是谁,因此Web搭上这个流行趋势,采用这个概念只是时间早晚的问题.如果坐下来想一想曾经登录过多少个站点并在这些站点上保存了简单的用户信息,可能会发现自己所属的群组比一开始想象的要多得多.从出售书籍和小器具的站点到讨论拥有一辆Ford Puma的好处的社区,或者宣传一个名为Look Around You的BBC TV喜剧节目的站点,作者发现自己是会员的站点多得无法一一列

  • [ASP.NET Ajax] ECMAScript基础类以及Asp.net Ajax对类&lt;Object&gt;的扩展

    "Everything is Object",在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传.由于我对JavaScript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习.在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类的后代肯定会拥有祖先的血缘. 既然开始学习JavaScript那就顺便在这里提一提他的原始数据类型,在

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

    整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西.本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章,这是最后一篇了! 1.ASP.NET MVC请求过程 1 2.Controller (1) 控制器在ASP.NET MVC中扮演着处理客户端请求的角色 1)必须实现System.Web.Mvc.IController接口 ->通常直接继承System.Web.MVC.Controller类 2)必须要以Controller结尾 3)通过不同的Action

  • ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0

    ASP.NET 在过去的 15 年里是个非常不错的"品牌". ASP.NET 4.6 已经支持在生产环境使用:http://get.asp.net. 但是,命名是新的,完全截取自 ASP.NET 框架 -- "ASP.NET 5",但这并不是个好主意,其中一个原因是:5 > 4.6,这样看起来 ASP.NET 5 比 ASP.NET 4.6 版本号更大,更好,甚至是可以替代 ASP.NET 4.6. 所以修改了名字,选择了一个更好的版本号. 重新引入 ASP.

  • ASP.net基础知识之常见错误分析

    1:command调用存储过程的时候,如果输出是dataset,selectcommand的command对象的connection先要指出,否则catch一辈子也是空的.. 2:存储过程的varchar字段如果是x.x的这种格式,容易出现细微的傻错误,注意不要漏了[]. 3:如果ascx文件的默认服务器控件的事件不重写的话在control控件里面没有自动回送!切记. 4:Page.RegisterOnSubmitStatement在ascx文件中小心使用... 5:viewstate在true

  • ASP.NET MVC基础

    一.MVC与ASP.NET MVC基础概念 MVC是Model-View-Controller的缩写. MVC将应用程序划分为3大组件:模型\视图\控制器. MVC不是ASP.NET所特有,它只是一种开发理念.java中的struts2也是一种MVC模型. ASP.NET MVC从2008年发布1.0版以来,截至2014年ASP.NET MVC最新版本已经是5.0. ASP.NET MVC从1.0版开始,就已经开放源代码(源码地址:aspnetwebstack.codeplex.com). AS

  • 从零开始学ASP.NET-基础篇第1/7页

    第一天 学习目的: 掌握最基本的Label.TextBox.Button控件用法 掌握用StringBuider类连接字符串 理解服务器的环境变量 StringBuilder类: 命名空间是:System.Text. StringBuilder类是个高效的类,StringBuilder.Append连接字符串的方法是非常快的.用于连接大量的字符串,其速度的优越性就会体现出来. 先举几个例子: 在cs或vb文件的头部加上 [C#]using System.Text; [VB]Imports Sys

  • ASP.NET母版页基础知识介绍

    模板页是做什么的? 利用模板页可以方便快捷的创建统一风格的ASP.NET网站,并且容易管理和维护,提高了效率. 模板页为网页定义所需要的外观和标准,在母版的基础上创建包含显示内容的各个内容页.当用户请求内容页时,这些内容页与母版页合并,这样,模板页的布局与内容页的布局就可以组合在一起输出了. 模板页一般用来: 1.通过修改模板页来处理网页的通用功能. 2.可以方便的创建一组控件和代码,并应用于一组网页. 3.通过允许控制占位符控件的呈现方式,模板页可以在细节上控制最终页的布局. 模板页与普通页

  • ASP.NET中实现文件的保护性下载基础篇

    一.文件保护性下载的需求 如果我们需要在站点上出售数字形式的商品,如电子书.数字油画等,那么如何在供授权用户正常下载的同时又阻止非授权用户非法下载您的产品呢? 通过Forms身份验证,只能使这个问题得到部分解决.本文中,我将讲解如何防止某些用户访问站点上的某些文件;即使这些文件能够被这些用户直接浏览. 解决这个问题的方法有多种,但是有些方法本身就有问题.本文中,我们将考察软件供应厂商常用的一些技术,然后再介绍一种新的解决方案.需要注意的是,这里介绍的是针对ASP.net站点的. 二.常见的文件保

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

    前言:前几天要准备一个演讲,所以准备了MVC的一些基本的东西,以前也使用过MVC,但是只是使用,而不是去了解,所以趁着这个机会好好的把别人的MVC视频看了一下(是一个微软的MVP会员发布的视频,相信有些人都看过),整理除了这个笔记,共享一下子,基本MVC的所有东西都介绍了,但是都是很基础的东西.本来打算一篇发表完的,但是发现东西有点多,所以分成了两篇文章! 什么是ASP.NET MVC (1) ASP.NET MVC是微软官方提供的MVC模式编写ASP.NET Web应用程序的一个框架 (2)M

  • ASP.NET MVC模式中应用程序结构详解

    目录 一.App_Data 二.App_Start 三.Content 四.Controllers 五.font 六.Models 七.Scripts 八.Views 九.Web.config 1.根目录下面的Web.config文件 2.Views文件夹下面的Web.config 十.Global.asax 在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App

  • MySQL数据库基础篇之入门基础命令小结

    本文实例讲述了MySQL数据库入门基础命令.分享给大家供大家参考,具体如下: 在日常工作与学习中,无论是开发.运维.还是测试,对于数据库的学习是不可避免的,同时也是日常工作的必备技术之一.在互联网公司,开源产品线比较多,互联网企业所用的数据库占比较重的还是MySQL. 在刚刚出炉的 2019 年3月份数据库流行度排行榜上,第一梯队的前三个数据库产品都获得了显著的加分增长. 其中 Oracle 上升了15.12分,MySQL上升了30.96分,SQL Server则上升了 7.79分.以下是前20

  • ASP.NET MVC重写RazorViewEngine实现多主题切换

    在ASP.NET MVC中来实现主题的切换一般有两种方式,一种是通过切换皮肤的css和js引用,一种就是通过重写视图引擎.通过重写视图引擎的方式更加灵活,因为我不仅可以在不同主题下面布局和样式不一样,还可以让不同的主题下面显示的数据条目不一致,就是说可以在某些主题下面添加一下个性化的东西. 本篇我将通过重写视图引擎的方式来进行演示,在这之前,我假设你已经具备了MVC的一些基础,我们先来看下效果: 系统登录后是默认主题,当我们点击切换主题之后,左侧菜单栏的布局变了,右侧内容的样式也变了,而地址栏是

  • ASP.NET MVC使用RazorEngine解析模板生成静态页

    简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目. 我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS.EcShop等),还有很多都是伪静态,伪静态我们就不做过多解释,通过路由或Url

  • 详解ASP.NET MVC 解析模板生成静态页(RazorEngine)

    简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目. 我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS.EcShop等),还有很多都是伪静态,伪静态我们就不做过多解释,通过路由或Url

  • 基于asp.net MVC 应用程序的生命周期(详解)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期中,用到的相关组件.因为在平常的开发过程中,我们可能知道怎样去使用MVC框架来处理相关的请求,大部分的时候我们只是在controller和action方法之间做相关的处理,对于真正内在的运行机制可能不是很了解.其实

  • ASP.NET MVC框架简介

    一.MVC模式 概述 1.MVC是一种流行的Web应用架构技术,他把Web应用划分成Model(模型).Controller(控制器)和View(视图)三部分. 2.优点:可测试.可维护 3.MVC是ASP.NET技术的子级(ASP.NET MVC),ASP.NET包括:ASP.NET WebForm和ASP.NET MVC. 二.MVC简介 1.MVC是什么 MVC是一种软件架构设计模式,针对具备人机交互功能的软件和程序. 2.执行顺序 控制器接收网页发送的请求,如果需要请求数据,先从Mode

随机推荐