做了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个基本属性:

  1. validateRequest 在asp.net中默认是true, 是指时否验证回发请求是否被篡改。要使用mvc这个一定要改成false, 否则自验证无法通过。
  2. pageParserFilterType 在asp.net中默认是用来获取解析asp.net默认页面模型参数的,这里用System.Web.Mvc.ViewTypeParserFilter重写了默认行为。
  3. pageBaseType 在asp.net中是指网页基类,默认为System.Web.UI.Page, 此处重写为 System.Web.Mvc.ViewPage,此类继承了System.Web.UI.Page。
  4. userControlBaseType 在asp.net中是指所有用户控件的基类,默认为System.Web.UI.UserControl,引处重写为System.Web.Mvc.ViewUserControl,此类继承了System.Web.UI.UserControl。
  5. 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 学习笔记一(基本原理)的更多相关文章

  1. ASP.NET MVC4学习笔记路由系统概念与应用篇

    一.概念 1.路由是计算机网络中的一个技术概念,表示把数据包从一个网段转发至另一网段.ASP.NET中的路由系统作用类似,其作用是把请求Url映射到相应的"资源"上,资源可以是一段 ...

  2. ASP.NET MVC4学习笔记之总体概述

    断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...

  3. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  4. ASP.NET MVC4学习笔记路由系统实现

    一.路由实现 路由系统实际是一个实现了ASP.NET IHttpModule接口的模块,通过注册HttpApplication的PostResolveRequestCache 事件对Url路由处理.总 ...

  5. ASP.NET MVC4学习笔记

    一.MVC简介

  6. ASP.NET MVC4学习笔记之Controller激活的扩展

    一. 为什么要进行扩展 在前面的分析中,我们知道默认的Controller激活系统只能实例化无参构造函数的Controller类型,但在某些情况一下,我们希望某些服务的实例能够自动注入到Control ...

  7. 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 ...

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

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

  9. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

随机推荐

  1. ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356

    项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的 ...

  2. C#与Java在继承静态类上的区别

    interface ITest { int Get(); } abstract class Test : ITest //此处会出现错误:Programe.Test不实现接口成员Program.ITe ...

  3. 触发Full GC执行的情况

    除直接调用System.gc外,触发Full GC执行的情况有如下四种. 1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然 ...

  4. tab标签切换

    <script>$(document).ready(function(){ $(".drtitle li").click(function(m){ $(this).ad ...

  5. 实现Launcher默认壁纸、选择壁纸定制化功能

    需求功能说明:     该定制需求为在系统中增加一个新的分区如myimage,用以实现存放定制资源.例如在myimage下新建wallpaper文件夹用于存放定制的墙纸图片资源,当Launcher加载 ...

  6. 2016-12-21(1)Git常用命令总结

    友情链接:http://www.cnblogs.com/mengdd/p/4153773.html

  7. 手机web页面开发-第一弹

    毕业设计题目<基于three.js的太阳系全景漫游>,项目开发运行在手机端,开始学习手机端页面开发. 新建index.html,写meta标签.meta标签分为两大部分:http标题信息( ...

  8. 关于python函数的学习记录

    1.默认参数必须指向不变对象! 2. extra = {'city': 'Beijing', 'job': 'Engineer'}注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函 ...

  9. Linux内核启动过程start_kernel分析

    虽然题目是start_kernel分析,但是由于我在ubuntu环境下配置实验环境遇到了一些问题,我觉得有必要把这些问题及其解决办法写下来. 首先我使用的是Ubuntu14.04 amx64,以下的步 ...

  10. MVC 知识点学习2

    1._Layout.cshtml   @RenderBody() 2.自定义扩展HtmlHelper(需要添加Bootstrap.js或者Bootstrap.min.js文件到项目中) namespa ...