开发者社区> aicoder> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Asp.Net MVC3 简单入门第一季(二)详解Asp.Net MVC3项目

简介: 前言 在上一篇文章Asp.Net MVC3 简单入门第一季(一)环境准备中我简单介绍了Asp.Net MVC3项目的安装和第一个Asp.Net MVC3项目的基本情况。没有详细介绍项目中各个文件夹的作用,以及创建的第一个页面是怎样运行起来的?还有好多的疑问,那在这篇文章中我们将详细介绍项目中各个文件夹的作用,并真的第一个项目我们简要介绍一下Asp.Net MVC的URL驱动的是怎么回事。
+关注继续查看

前言

在上一篇文章Asp.Net MVC3 简单入门第一季(一)环境准备中我简单介绍了Asp.Net MVC3项目的安装和第一个Asp.Net MVC3项目的基本情况。没有详细介绍项目中各个文件夹的作用,以及创建的第一个页面是怎样运行起来的?还有好多的疑问,那在这篇文章中我们将详细介绍项目中各个文件夹的作用,并真的第一个项目我们简要介绍一下Asp.Net MVCURL驱动的是怎么回事。 

第一节:Asp.Net MVC3项目介绍

让我们先看一下,一个普通的Asp.Net MVC3项目的样例,如下图所示 

 

跟WebFrom还是有区别的,如果你已经了解Asp.Net MVC2的话,那就感觉异常熟悉了!但还是有些区别的。不管怎样我们都一一介绍一下。 

很有意思的事情是即使我们创建一个空的MVC项目,VS也自动帮我们创建以上图所示的目录,这是为何呢?这是由于MVC秉承了“约定大于配置”的思想,我们在使用Asp.Net MVC3开发项目时也要注意,一定要按照它的约定办事,比如:Controller在返回Action后需要一个View进行展示(当然是调用了View()方法时),这时候Asp.Net MVC回到Views文件夹下找到Controller名字相同的文件夹下面找到具体的页面进行渲染,当然如果找不到会去Shared文件夹下去找。看下表所示的就是Asp.Net MVC3中各个文件夹的作用。 

文件夹

作用

/Controllers

存放控制器类【职责是:处理用户的请求,指挥具体的页面进行渲染交给客户端】

/Views

存放各个控制器对应的视图文件,如果是Razor引擎的话那后缀是cshtml.如果使用的WebFrom的视图引擎的话,那还是Aspx后缀。

/Content

主要存放照片、CSS、Flash等文件

/Scripts

主要存放脚本文件【微软默认给我们提供了JQuery1.5.1的包,看来JQuery已经成为默认的工业标准了!我们没有退路了,呵呵,当然我个人也非常喜欢JQuery】

/Models

主要存放ViewModel类【当然这个不是严格这样要求的,而是推荐你这么做。】

其他的几个比较有意思的文件:

一个是Web.Config,另外一个是Global.asax虽然我们大家都非常熟悉,但是跟之前我们WebFrom还是有很多的区别的。WebConfig文件中,配置了启用客户端脚本验证、配置了System.Web.Routing、System.Web.Mvc等组件。而Global.asax则在应用启动的时候注册了全局的Area【区域,后面会相信讲解】、全局Filter、路由等。

第二节:Asp.Net MVC的请求处理模型

在上一篇中我们也简单做了个小例子,直接添加一个Controller,然后在Action上添加一个View,直接运行,然后就在我们面前呈现了一个普通的Html页面。那我们详细解释一下这种开发方式或者说开发模型。在讲解之前我们先认识几个概念:

Controller:控制器。在Contrller文件夹添加的以Controller结尾的类就是控制器,它的每个方法就是一个Action。它的职责是从Model中获取数据,并将数据交给View,它是个指挥家的角色,它并不控制View的显示逻辑,只是将Model的数据交给View,而具体的怎样展示数据那是View的职责,所以Controller跟View是一个弱耦合的状态,而且Controller可以任意指定具体的View进行渲染。所以达到了UI层的代码和实体良好的分离。

View:视图.负责数据的展示,当然这个视图代码的编写应该是更接近纯净的Html的,而View层代码的书写又直接跟视图引擎解析的规则有关,所以Razor的语法跟webFrom视图引擎的语法截然不同。而笔者更倾向更喜欢Razor语法的简洁、方便。

Model:很多人把Model理解成领域模型,而MVC本身是一个表现模式,它是更倾向于UI层的一个框架,所以一般我们指定的Model呢在使用时一般作为ViewModel来用,但是总的MVC的思想呢,Model还是领域相关的东西吧。

经过MVC3个模块的了解分析,我们大体也知道了Asp.Net MVC的一些基本的概念。接下来我们分析一个完整的Http的处理过程。看下面一个图:

 Asp.Net MVC请求处理响应原理图

客户端发送一个Http请求,首先被我们的IIS捕获到,然后根据Url请求的格式,最终交给我们的Route组件,然后它负责解析出我们的Url具体请求的是哪个Controller下的哪个Action。然后MVC经过处理调用我们的Action执行。在Action中我们一般会从业务的Façade层取出数据,然后将传输层的数据转换成ViewModel再交给View的视图引擎渲染,最终生成Html的字节流写回客户端。

回到我们第一个项目中的情况是,请求:Http://localhost/Home/Index请求过来,由Route组件解析出Controller是Home,Action是Index,则通过工厂创建一个Controller的实例,然后调用InvokeAction方法,执行Index的方法,最终执行View()方法返回一个ViewResult实例,再调用自己的EexcuteResult方法,将数据上下文和输出流交给视图引擎,然后最终渲染成Html页面交给客户端,最终就看到了我们的第一个页面。

总结一下:

Asp.Net MVC所有的请求都归结到Action上,而且Asp.Net MVC请求--处理--响应的模型非常清晰,而且没有WebFrom那种复杂的生命周期,整个请求处理非常明晰简单,又回归到了最原始的Web开发方式,就是简单的请求处理响应!

记于:2011年6月12日23:45:26

 

初识Asp.Net MVC2.0

初识Asp.Net MVC2.0【续】

Asp.Net MVC2.0 Url 路由入门---实例篇

Asp.Net MVC2.0 Url 路由入门

Asp.Net MVC3 简单入门第一季(一)环境准备

Asp.Net MVC3 简单入门第一季(二)详解Asp.Net MVC3项目

Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter

Asp.Net MVC3 简单入门第一季(四)详解Request Processing Pipeline

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Redis入门与ASP.NET Core缓存
Redis入门与ASP.NET Core缓存
0 0
Autofac入门与替代ASP.NET CO re、 ABP依赖注入容器
Autofac入门与替代ASP.NET CO re、 ABP依赖注入容器
0 0
Blazor入门:ASP.NET Con eRazor 组件
Blazor入门:ASP.NET Con eRazor 组件
0 0
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门一、前言1、本教程主要内容ASP.NET Core 中间件介绍通过自定义 ASP.NET Core 中间件实现请求验签2、本教程环境信息软件/环境 说明操作系统 Windows 10SDK 2.
1486 0
ASP.NET WebApi技术从入门到实战演练
一、课程介绍    曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会!在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的逻辑呢? 希望大家学完本次分享课程能够达到使用ASP.NET WebAPI技术,并且掌握如何优雅提供对外API接口。
2200 0
菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部方法来判断跳转returnUrl //内部跳转 private IActionR...
1276 0
菜鸟入门【ASP.NET Core】14:MVC开发:UI、 EF + Identity实现、注册实现、登陆实现
前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改。 MvcCookieAuthSample项目地址:http://www.
1207 0
菜鸟入门【ASP.NET Core】12:JWT 设计解析及定制
前言 上一节我们讲述的书如何使用jwt token,而且上一节的token是要加Authorization:bearer XXXXXXXXXXXX才能访问。 这一节我们来研究如何自定义类似jwt的token验证,也就是说直接从header中拿取我们想要的token 自己定制JWT 首先,继续在上一节的JwtAuthSample项目中的Startup.
1402 0
菜鸟入门【ASP.NET Core】11:应用Jwtbearer Authentication、生成jwt token
准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSample.
2284 0
菜鸟入门【ASP.NET Core】10:Cookie-based认证实现
准备工作 新建MVC项目,然后用VSCode打开 dotnet new mvc --name MvcCookieAuthSample 在Controllers文件夹下新建AdminController.
992 0
+关注
aicoder
资深全栈开发工程师,曾任职金和软件等知名公司。对Web前端全栈开发技术、PHP、Java、DotNet、HTML5、数据库集群等有深入研究。曾参与大型分布式高并发互联网项目设计开发等工作,对于分布式应用架构设计、系统优化等经验丰富
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载