asp.net mvc4 学习笔记一(基本原理)
做了8年的asp.net webform,用过MVVM但还没用过MVC , 虽然项目不用MVC,但是还是想了解一下,今天第二天学习,以下是学习心得。
VS2012默认带有asp.net mvc3和asp.net mvc4项目模板。
基本URL示例剖析
URL:http://localhost/Account/Login 其中http://localhost/为网站根目录,Account为Controller名称,Login为Action名称。 据此可知 . 网站中Controllers目录下应有一名为AccountController的类,其中有一个名为Login的Action成员; . 网站中Views目录下应有一名为Account的目录,Account目录下应有一名为Login.cshtml的视图。 以上这些都是基本的MVC的VC结构,是默认约定的。
ASP.NET MVC ( ASP.NET 引擎,Razor 不是基于ASP.NET的 WebForms 的) 其实是基于ASP.NET Web Forms 机制之上的,在ASP.NET的运行之上加了一层封装而成的。 System.Web.Mvc.ViewPage继承自 System.Web.UI.Page,前者是ASP.NET MVC 的页面呈现类,而后者正是标准的ASP.NET Web Forms 前端页面类。这也就不奇怪它为什么可以支持 WebForms 的前端绑定语法了,就是本家的语法。
1.首先,在网站根目录的Web.config中注册了一个HttpHandler
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
这个就是 MVC 的入口,这个Handler 主要用来处理MVC中的路由,所有的请求都会经过它。
2. Views目录下的Web.config,其中system.web/pages如下:
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
其中继承重写了asp.net web forms 中默认页面的4个基本属性:
- validateRequest 在asp.net中默认是true, 是指时否验证回发请求是否被篡改。要使用mvc这个一定要改成false, 否则自验证无法通过。
- pageParserFilterType 在asp.net中默认是用来获取解析asp.net默认页面模型参数的,这里用System.Web.Mvc.ViewTypeParserFilter重写了默认行为。
- pageBaseType 在asp.net中是指网页基类,默认为System.Web.UI.Page, 此处重写为 System.Web.Mvc.ViewPage,此类继承了System.Web.UI.Page。
- userControlBaseType 在asp.net中是指所有用户控件的基类,默认为System.Web.UI.UserControl,引处重写为System.Web.Mvc.ViewUserControl,此类继承了System.Web.UI.UserControl。
- controls 节点定义了所有以mvc开头的控件为mvc用户控件。
3. Views目录下的Web.config中HttpHandlers有如下定义:
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
从命名猜测,这个应该是在找不到页面的时候他会自动处理这个请求。但就这个Handler本身而言他会拦截Views目录下的所有asp.net请求,默认不包含*.html之类的静态请求。asp.net默认的动态页面一般为*.aspx和*.ascx等,为什么cshtml可以被解析为页面呢?又没有codebehind源代码显式定义, 我想这个原因就在BlockViewHandler中,它负责将cshtml解析为System.Web.Mvc.ViewPage。
asp.net mvc4 学习笔记一(基本原理)的更多相关文章
- ASP.NET MVC4学习笔记路由系统概念与应用篇
一.概念 1.路由是计算机网络中的一个技术概念,表示把数据包从一个网段转发至另一网段.ASP.NET中的路由系统作用类似,其作用是把请求Url映射到相应的"资源"上,资源可以是一段 ...
- ASP.NET MVC4学习笔记之总体概述
断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...
- ASP.NET MVC4学习笔记之Controller的激活
一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...
- ASP.NET MVC4学习笔记路由系统实现
一.路由实现 路由系统实际是一个实现了ASP.NET IHttpModule接口的模块,通过注册HttpApplication的PostResolveRequestCache 事件对Url路由处理.总 ...
- ASP.NET MVC4学习笔记
一.MVC简介
- ASP.NET MVC4学习笔记之Controller激活的扩展
一. 为什么要进行扩展 在前面的分析中,我们知道默认的Controller激活系统只能实例化无参构造函数的Controller类型,但在某些情况一下,我们希望某些服务的实例能够自动注入到Control ...
- 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 ...
- [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异
[ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载.ID型别差异 原始码下载 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证.授 ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
随机推荐
- ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
salve复制线程停止,尝试start slave 时报ERROR 1872错误mysql> system perror 1872 MySQL error code 1872 (ER_SLAVE ...
- html基础01
一.HTML 基础 1.HTML基础标签:<head> <bady> <tittle>XXX<tittle>:为标签 2.HTML标题 <h1&g ...
- centos6.4下面安装postgresql以及客户端远程连接
一.安装 centos6.4服务器IP:192.168.220.131 window7客户端IP:192.168.199.218 在centos官网http://www.postgresql.org/ ...
- c语言中gets ,getschar 和fgets 的用法及三者之间的差别,还有scanf
①gets [1]函数:gets(字符指针) [2]头文件:stdio.h(c中),c++不需包含此头文件 [3]原型:char*gets(char*buffer); [4]功能:从stdin流中读取 ...
- centos7下安装mantis
1.环境配置 Web Server:Apache,The web server must support PHP. 数据库:MySQL (or one of its forks, e.g. Maria ...
- shell脚本入门及基本元素
命令和参数 #!/bin/sh 其中#!用来告诉系统它后面的参数是用来执行该文件的程序,必须放在脚本的首行,不然会在执行脚 本 的时候报错.当一个文件开头的两个字符是#!时,内核会扫描其它的部分看是否 ...
- hdu1004
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- 对字符串进行简单的字符数字统计 探索java中的List功能
题目: 统计一个字符串中数字和字符串的个数,并分别进行排列,要求 1.数字,字符串可以从键盘获取. 2.储存在list 3.统计数字个数,字符串个数 4.把数字和字符串按从小到大的顺序输出 5.不能使 ...
- 一道google面试题
输入n,把1-n分成两个和相等的子集,有多少种分法 想了个dp,直接背包也行 #include <iostream> #include <cstdio> using names ...
- 一键编译go文件命令.bat
一键编译go文件命令.bat , 请新建 一键编译go文件命令.bat 文件,放到你的xxx.go文件目录下 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 @e ...