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来处理具体的客户端请求

3.Action

  (1) 是指在继承了System.Web.Mvc.Controller类中所定义的返回值的类型可以兼容

  (2)ActionResult方法

代码如下:

namespace MvcApplication.Controllers
{
public class HomeController:Controller
{
public ActionResult Index()
{
ViewBag.Message="韩迎龙";
return View();
}
}
}

  (3)ASP.NET MVC3的ActionResult

    

  (4)注意事项

  1)能够通过URL访问的Action必须是公有(Public)方法

  2)如果标记了[NonAction]属性,这不能通过URL访问该Action

  3)默认,Action得方法名就是Action名(通过URL访问的名称),如有特殊需求也可通过[ActionName("OtherActionName")]标记出特定的Action名

  4)我们可以通过[HttpPost][HttpGet]等来区分处理不同的请求动作的同名Action

4.ASP.NET Routing 路由,过滤器

  (1) ASP.NET Routing模块(Module)的责任是将传入的客户端(浏览器)请求映射为特定的MVC Controller Actions

  (2)路由机制

  1)路由引擎 -映射URLS到Controlller

代码如下:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}

  2)/Products/Detail/8

代码如下:

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
);
public class ProductsController:Controller
{
public ActionResult Details(int id)
{
return View();
}
public ActionResult Edit(int id)
{
return View();
}
}

5. MVC3中Routing变更

  (1) 从System.Web.Routing3.5程序集中转移到了System.Web 4程序集中,成为了基础服务的一部分。

  (2)在ASP.NET 4中Routing的Module被注册在根Web.Config中,不需要你在自己的应用程序中的Web.Config中另行注册了

  (3)UrlRoutingModule处理的事件减少了一个,仅处理PostResolveRequestCache事件

  (4)HttpRequest新增加了一个RequestContext属性

  (5)增加了PageRouteHandler,支持WebForm路由功能

  (6)RouteCollection中增加了4个MapPageRoute的重载方法,添加路由规则更方便了

6. Routing好处

  (1) 可以方便的实现REST服务

  (2)Url友好化,利于SEO和增强用户体验

  (3)Controller和Action的调用规则可定制化,降低耦合,提高灵活性

7. 过滤器

  (1) Filter是一种AOP模式,能够对一系列操作进行横切干扰的手段,它很大程度解耦了依赖关系,让我们的代码更加简练,功能更加丰富

  (2)ASP.NET MVC中提供了4类Filter接口

   1)IActionFilter

  2)IAuthorizationFilter

  3)IExceptionFilter

  4)IResultFilter

  (3)ASP.NET MVC中提供了OutputCacheAttribute,HandlErrorAttribute,AuthorizeAttribute等常用Filter实现

  (4)Filter的切入过程

  1)以ActionFilter为例

      

8. SP.NET MVC3中的Filter

  (1) 提供了全局注册Filter功能

  (2)提供了对ChildAction的OutputCache支持

  1)结合[ChildActionOnly]使用

9. Model

  (1) MVC中Model主要负责维持数据状态,将数据从数据存储器中检索并传递给控制器,客户端传送过来的数据经过处理后再传回数据存储系统中,是MVC中较重的一层

  (2)ASP.NET MVC框架本身并不关心数据的存储系统,并通过一些额外的帮助类和Model绑定机制简化了Model的使用

  1)具备自绑定机制

   2)具备自验证机制

  (3)ASP.NET MVC3 Model的改进

  1)ASP.NET MVC3 Model主要改进了验证机制

   ->数据验证(Data Annotations)

   ->客户端验证(Client Validation)

   ->远程验证(Remote Validation)

  ->自验证(Self Validation)

  (4)数据验证

  1)通过System.ComponentModel.DataAnnotations的方法集合进行验证,并对客户端验证产生一些便利影响

   2)可以通过继承ValidationAttribute实现自定义验证的Attribute

  (5)客户端验证

  1)使用Jquery的验证插件

  2)jquery.validate.unobtrusive.mis.js实现客户端验证

   ->启用客户端验证

   <appSettings>

   <add key="ClientValidationEnabled" value="true" />

   <add key="UnobtrusiveJavaScriptEnabled" value="true" />

  </appSettings>

  ->引用JQuery

   <script src="http://www.cnblogs.com/Scripts/jquery.validate.min.js" type="text/javascript"></script>

    <script src="http://www.cnblogs.com/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

   ->特殊的验证

@{

Html.EnableClientValidation();

}

  (6)远程验证

   1)在Model的中使用跟RequiredAttribute相似

   1)[Remote("验证的Action名","控制器名",ErrorMessage="远程验证为未通过的错误消息")]

   2)注意

   1)用于远程验证的Action必须是HttpGet的,Post提交无效

   2)Action返回的结果是JsonResult,不是直接返回布尔值

  (7)自验证

  1)在Model中结合ValidationContext和ValidationResult来提供验证

代码如下:

public IEnumerable<ValidationResult> Validate(ValidationContext validationResult)
   {
   if(EndDate<=StartDate)
  {
   yield return new ValidationResult("结束时间必须大于开始时间");
   }
   }

10. 最佳实践

  (1) 分层设计

   1)多个项目

  2)分离关注点

  3)可替换的数据访问层

  (2)Repository模式(业务层)

   1)将数据的增删改查(CRUD)操作封装到Repository中

  2)业务逻辑/数据验证封装到Service中

   3)Controller调用Respository和Service

  (3)PRG模式(方法)

   1)POST

   2)Redirect

   3)GET

   4)PRG模式是用来确保修改数据只发生一次

  (4)保持视图中代码量最小化

   1)视图中不要含有数据处理的逻辑代码

   2)视图中要避免包含大的代码块

   3)构建多个试图/局部视图

   4)使用适当的@Helper和@Function语法

  (5)跟神奇的字符串说"拜拜了"

   1)ASPX模式

  @ViewData["Message"]

  @ViewData["TotalCount"]

   2)Razor模式

  @Model.Message

   @Model.TotalCount

   3)尽量使用特定的Model,而避免使用ViewData/ViewBag

  (6)DomainModel(领域模型)!=ViewModel(视图模型)

   1)符合需求的最小化ViewModel

  1)有效验证

   2)高安全性

  3)高性能

  2)使用一些Mapping工具,做双向映射填充

   1)AutoMapper,EmitMapper,ValueInjecter

   2)自定义的ORM-GenerPoint.ORM

   3)使用专门的ViewModel填充逻辑,轻松解决国际化/本地化

  (7)使用新的AJAX Helper

  1)Web.Config中德appSettings

   <add key="UnobtrusiveJavaScriptEnabled" value="true">

   2)视图中引用jquery.unobtrusive-ajax.js

   3)视图中调用AJAX Helpers

   1)@Ajax.ActionLink("Home","Index",new AjaxOptions{UpdateTargetId="main"})

   2)<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#content" href="/">Home</a>

  (8)视图中尽可能的写HTML代码

  1)尽可能写纯HTML代码

  2)不要为了隐藏HTMl,而故意自定义Html.Submit之类的Helper

  3)尽可能不使用WebForm控件做视图代码渲染

  (9)IIS Express 7.5

  1)具有完整的Web服务器功能

   1)SSL

   2)网址重写

   3)可对<System.webServer>的配置进行本地测试

   4)IIS7.X其他的模版集合

   2)轻量级

   1)<5M

   2)不需要管理员账户

  3)高性能

11. 关于性能优化的软实力

  (1) 了解HTTP,Cache,Ajax各种基础知识

  (2)能够针对整体Web执行环境进行分析与架构规划

  (3)能够设计出妥当的缓存策略

  (4)能够进一步针对网站性能进行数据话分析

12. 关于性能优化的硬功夫

  (1) 熟悉.net/C#/ASP.NET MVC框架与核心原理

  (2)能够进一步针对项目进行妥善规划,做好关注点分离设计

  (3)熟悉Profiling技术,能够分析出个环节的性能瓶颈

  (4)能够针对各种环境进行代码优化,提升程序的执行性能

13. 决定WEB性能的关键要素

  (1) Web性能优化基础-HTTP

1)http是无状态的

2)一个网页包含了N次HTTP请求

(2)分析网页打开时的Http状态

1)Fiddler

2)IE10 Developer Tools

(3)客户端优化

1)HTTP请求次数减少

2)下载所使用的带宽

3)DNS查询的时间长短

4)CSS显示的速度

5)JavaScript调用的速度

(4)服务端优化

1)IIS

->控制客户端

HTTP Cache Control

->控制服务器端

将数出缓存(Output Caching)

提升数据库查询速度

2)ASP.NET MVC

->调用性能改善

->适当的缓存策略

(5)[SeesionState]

1)使用SessionState属性

控制Controller访问阶段状态数据(Session)的方式

2)注意:关闭Session后不能在使用TempData传递信息

(6)[OutputCache]

1)Html.Action与Html.RenderAction支持Output Caching

->@{Html.RenderAction("ActionName")}

->@Html.Action("ActionName")

2)ChildAction终于支持OutputCache属性

->[ChildActionOnly]

->仅支持Duration,VaryByCustom与VaryByParam参数

->不能使用CacheProfile参数

(7)改变ViewEngine的默认设置

1)移除多余的ViewEngine以提升解析View的速度

->ViewEngines.Engines.Clear();

->ViewEngines.Engines.Add(new RazorViewEngine());

2)也可以通过这种方式变更载入View的顺序

->默认是WebFormViewEngine优先处理

->ViewEngines.Engines.Add(new WebFormViewEngine());

(8)避免闯入为null给视图(View)

1)Html.TextBoxFor(m=>m.Name)

->当传入null时会引发Exception,但会被try/catch掉

->public ActionResultInsert(){

return View(new Products());

}

(9)关闭Web.Config的debug模式

1)<compilation debug="False" targetFramework="4.0" />

基础篇就到这里了,下面的文章我们来些深入点的知识,大家期待下吧

(0)

相关推荐

  • [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母版页基础知识介绍

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

  • 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 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 2.0 程序安全的基础知识

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

  • 从零开始学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 MVC小结之基础篇(一)

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

  • 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中实现文件的保护性下载基础篇

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

  • 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 MVC文件上传教程(二)

    上文ASP.NET MVC 文件上传教程(一)我们讲了简单的上传以及需要注意的地方,查相关资料时,感觉上传里面涉及到的内容还是比较多,于是就将上传这一块分为几节来处理,同时后续也会讲到关于做上传时遗漏的C#应该注意的地方,及时进行查漏补缺,尽量将这一块完善起来. 引入 上一节我们讲到了上传这一块,有朋友提出未涉及到大文件的上传这一块,思前想后还是来试着做做,毕竟之前没怎么去仔细考虑过这个问题,尤其还可以联系实际开发中创建文件夹等一系列问题,同时关于上传在网上随便找找都充斥着大量的组件,我们何必再

  • dojo 之基础篇(二)之从服务器读取数据

    本例子沿用 "dojo 之基础篇" 中的内容首先,我们在HelloWorld.html的同一级目录,新建一个文件,名为response.txt,内容为: Welcome to the Dojo Hello World Tutorial 将section 2的代码替换 为以下代码 <!-- SECTION 3 --> <script type="text/javascript"> dojo.require("dojo.io.*&quo

  • 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

  • dojo 之基础篇(三)之向服务器发送数据

    向服务器发送数据有get和post两种. 首先,要将body中的html代码替换为 <button dojoType="Button" widgetId="helloButton">Hello World!</button> <br> 请输入名称: <input type="text" id="name">不输入数据,怎么提交数据呢. get我们只要将基础篇(二)中的: func

  • 利用ASP.NET MVC+Bootstrap搭建个人博客之praise.js点赞特效插件(二)

    在上篇文章给大家介绍了利用ASP.NET MVC和Bootstrap快速搭建响应式个人博客站(一).接下来给大家介绍如果做个点赞插件,一起通过本文学习吧! 1. 为啥要做这个点赞插件?    praise.js是一款小巧的jQuery点赞插件,使用简便,效果美观. 在做个人博客时遇到了文章点赞问题.联想到各大社交网络中的点赞特效:手势放大.红心放大等等,很酷很炫.但是并没有现成的好用的插件,于是就打算自己做一个类似的点赞插件,放上自己喜欢的点赞图标.PS:小站的图标均来自阿里妈妈旗下的那个ico

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

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

随机推荐