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可以基于任何目的使用 ...
随机推荐
- 涵涵和爸爸习惯养成进度表(二)(May 30 - )
规则说明 22天内,没有哭脸,不超过三个无表情脸,可以给一个奖励(动画书等) 涵涵违反规则,在爸爸和妈妈都同意的情况下,可以给无表情脸 爸爸违反规则,在妈妈和涵涵都同意的情况下,可以给无表情脸 获奖记 ...
- Permutation
(M) Permutations (M) Permutations II (M) Permutation Sequence (M) Palindrome Permutation II
- ubuntu下修改进入root用户和修改文件权限
(1)进入root用户 su root 密码:设置的root密码 (2)修改文件权限 sudo chmod +777 file (3)执行shell ./shellfile (4)编写shell 第 ...
- struts2乱码
在spring.jar包的org.springframework.web.filter包下有个CharacterEncodingFilter.java 把spring.jar放进工程的lib里,然后在 ...
- Centos安装完MariaDB后启动不了 MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
[root@admin-node subsys]# service mysql startStarting MySQL. ERROR! [root@admin-node subsys]# servic ...
- 分享一些DICOM数据下载网站
医院的DICOM数据轻易不让拷出来,所以这里列出一些医学数据,但不局限于DICOM数据网址,供大家下载. 斯坦福大学体数据库(RAW DATA) http://graphics.stanford.ed ...
- jQuery取得select 选中值和文本 来自园友“大气象”
本来以为jQuery("#select1").val();是取得选中的值, 那么jQuery("#select1").text();就是取得的文本. 这是不正确 ...
- Matlab代码优化--向量化
前段时间改写老师的一个计算纳米细颗粒物的C语言程序,不过运行的效率实在是太低了,工作站跑都很吃劲,晚上看了冈萨雷斯的数字图像处理意外发现了问题所在.在将C语言的程序改写成Matlab程序的时候我还是保 ...
- stm32通用定时器步骤
- android修改debug keystore文件使之和正式keystore sha1一致
转自:http://blog.k-res.net/archives/1671.html Android应用开发接入各种SDK时会发现,有很多SDK是需要靠package name和keystore的指 ...