ASP.NET MVC在原来ASP.NET的基础上抛弃了基于页面的架构风格,使用了全新的MVC(模型-视图-控制器)架构的一种技术。

  目前,它和ASP.NET都共存在.NET Framework之上。

1.       MVC架构

  MVC架构是一种严格实现应用程序各个部分隔离的架构模式,这种隔离称之为“松耦合”。这种架构模式的好处如下:

  1)         开发

    开发单个组件时不再依赖其他组件,减少了组件间的影响。

  2)         测试

    组件间的松耦合,允许测试代码能够替换其他组件,减少其他不必要的操作,简化了测试流程。

  3)         维护

    组件间的依赖关系降低,修改一个组件时,对其他组件的影响降低到最小,更利于维护。

2.       MVC架构的组成

  MVC架构将应用程序严格地划分为三层:模型、视图和控制,每层有具有各自的职责,不需要关注其他层具体实现。三层之间的关系如下图所示:

  模型(Model):代表着核心的业务逻辑和数据,封装了一些属性和行为。

  视图(View):负责将模型数据转换并呈现在表示层上。

  控制器(Controller):控制程序逻辑,并协调视图和模型之间的关系,它从视图上接受请求,使用模型执行对应的操作,并将执行的结构反馈给视图。

3.       路由

  对ASP.NET MVC网站的请求都是使用URL的形式,因此,系统能够根据URL的信息作出相应的动作,这就是ASP.NET Routing模块的主要作用,所以说,ASP.NET Routing是ASP.NET MVC请求的核心。

简单来说,ASP.NET Routing是一个模式匹配系统,程序运行初始化时,根据Route表的信息进行模式注册,即告诉Routing模块如何处理与模式匹配的请求,程序运行时,Routing模块接受请求,先在路由表进行模式匹配,匹配成功时,将请求转发给特定的控制器处理,匹配不成功时,则返回404错误码。

4.       路由配置

  创建程序时,默认已经配置ASP.NET路由,主要包括两个位置

  首先,在Web.config文件中配置有路由相关的配置节,<system.web.httpModules/>、<sytem.web.httpHandlers/>、<system.webserver.modules/>、<sytem.webserver.handlers/>。

  其次,程序启动时调用的注册信息,文件位置App_Start/RouteConfig.cs,调用扩展方法MapRoute()方法。

    routes.MapRoute(

        “Default”,//路由名字

        “{controller}/{action}/{id}”,//URL参数信息

        new {controller=””,action=””,id=UrlParameter.Optional }//默认URL参数

  还可以添加自定义路由,但是,代码位置必须放置在默认路由的前面,否则永远得不到匹配。

URL

Controller

Action

ID

/auctions/auction/1234

AuctionsController

Auction

1234

完美匹配

/auctions/recent

AuctionsController

Recent

无参数

/acutions

AuctionsController

Index

默认Action

/

HomeController

Index

系统默认

5.       Controller

  MVC架构中,Controller能够相应视图发来的请求,并获取相应的模型数据,反馈给视图。在ASP.NET MVC程序,Controller是包含被路由模块处理请求时调用的方法的类。

  Controller是一个类,统一派生于System.Web.Mvc.Controller基类。

  ASP.NET MVC程序有个约定就是创建的Controller类,都必须以Controller结尾,比如HomeController。系统启动时,会自动查找派生于Controller的子类,并且名字后缀为Controller的类进行实例化操作。程序中使用该控制器时,不需要填写后面的Controller后缀,直接使用名称即可。

6.       ControllerAction

  Controller类上的公共方法称为ControlAction。ControlAction不能重载,也不能为静态方法。

7.       ActionResult

  ControllerAction处理完请求后,如果需要返回处理结果,则需要使用ActionResult进行返回。Controller中每个ControllerAction都要返回ActionResult,但不需要手动编码完成,只需要调用Controller基类中的对应方法即可。

Content()

返回文本类型的ContentResult

“Hello World”

File()

返回文件内容的FileResult

HttpNotFound()

返回包含404错误码的HTTPNotFoundResult

JavaSript()

返回包含JavaScript内容的JavaScriptResult

“function hello(){

alert(hello world);

}”

Json()

返回Json格式数据的JsonResult

PartialView()

返回包含部分视图内容的PartialViewResult

Redirect()

跳转到给定的URL上

View()

返回渲染视图的ViewResult

8.       操作参数

  ControllerAction在被执行时,能够使用请求时发送的参数信息,这种功能称为“模型绑定”。比如:

  ublic ActionResult Index(string name,string password)

  {  

  }

  当ASP.NET MVC框架执行该方法时,会自动将传递的参数值赋值到对应的参数上。ASP.NET MVC框架处理大量的基础工作,让我们能够专注于业务逻辑,而且代码也有更高的可读性。

9.       视图

  ControllerAction向视图返回了ActionResult类型的ViewResult实例,当渲染视图时,ASP.NETMVC框架会使用到Controller和ControllerAction的名字。以HomeController中的Index为例:

  public ActionResult Index()

  {

  return View();

  }

  ASP.NET MVC框架中一个约定,Controller中使用到的视图文件都需要放置在Views下以Controller名称命名的文件夹中。而且,若返回值中没有传递视图名称参数,则直接ControllerAction的名称作为视图的文件名称。如果没有找到对应的视图文件,则会继续在Views下的Shared文件夹中查找。

ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础的更多相关文章

  1. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  2. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  3. .NET MVC 学习笔记(三)— MVC 数据显示

    . NET MVC 学习笔记(三)—— MVC 数据显示 在目前做的项目中,用的最多的数据展示控件就是table展示(说不是的请走开,不是一路人),以下详细阐述下table的使用方法. 先看效果: 上 ...

  4. 【ASP.NET MVC 学习笔记】- 06 在MVC中使用Ninject

    本文参考:http://www.cnblogs.com/willick/p/3299077.html 1.在ASP.NET MVC中一个客户端请求是在特定的Controller的Action中处理的. ...

  5. 【ASP.NET MVC 学习笔记】- 01 理解MVC模式

    本文参考:http://www.cnblogs.com/willick/p/3195560.html 1.MVC模式是软件系统的一种架构模式,它将软件分为三大模块: 模型(Model):封装业务逻辑以 ...

  6. ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用

    Ajax的全名为:Asynchronous Javascript And XML(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.Ajax技术首先向Web服务器发送 ...

  7. 前端MVC学习笔记(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

  8. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  9. [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异

    [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...

随机推荐

  1. K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境

    一.部署流程介绍 开发人员通过Git上传asp.net core 项目到Gilab,并编写好.gitlab-ci.yml , GitLab-Runner 自动拉取代码,然后进行Build,编译,单元测 ...

  2. NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json

    一.简介 1.读取配置文件是开发过程中使用非常频繁的操作.属称”不能写死“ 二.NetCore读取配置文件 1.新建一个静态公共变量,属称单例. 2.在程序Startup启动时,将系统变量传递给单例. ...

  3. Spring Boot 学习系列(10)—SpringBoot+JSP的使

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 解决问题 随着spring boot 框架的逐步使用,我们期望对于一些已有的系统进行改造,做成通用的脚手架, ...

  4. python salt 实现windows账户自动化

    import random import string import json import logging import time import os import sys def usage(): ...

  5. 【JS深入学习】——事件代理/事件委托

    事件代理/事件委托(event delegation) 需求一:当一个div内部有多个事件发生,给每个元素逐个添加事件十分麻烦... 需求二:在项目中我们常常需要动态的添加元素,不可避免的需要为那些未 ...

  6. jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)

    JVM高级特性与实践(十二):高效并发时的内外存交互.三大特征(原子.可见.有序性) 与 volatile型变量特殊规则 简介: 阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描 ...

  7. 【bzoj5210】最大连通子块和 动态dp

    动态$dp$好题 考虑用树链剖分将整棵树剖成若干条链. 设x的重儿子为$son[x]$,设$x$所在链链头为$top[x]$ 对于重链上的每个节点(不妨设该节点编号为$x$)令$f[x]$表示以$x$ ...

  8. GDOI2018滚粗记

    day-50: 高中全体成员去了北京训练,我被虐成傻逼(貌似总分全校倒数第2). day-20: 回广州了,间断式略微考好55555..... day0: 早上起床好像有点晚qwq 然后简单打了个FF ...

  9. vba调用c#dll

    本文阐述如何用C#创建COM组件,并能用VB6.0等调用.附有完整测试通过的代码.该功能总体看来很简单,实际值得注意的地方还是挺多.因为很少有人写这类文章,有些代码也是转来转去的不全,有些甚至让人误入 ...

  10. 解决waveInOpen录音编译x64程序出错的问题

    1.之前也碰到过x86程序升级为x64程序,关键点是类型大小的使用. 之前同事碰到过一个用int表示指针的程序,程序改为x64会出错,找原因找了半天. 2.今天我也碰到了,使用aveInOpen录音, ...