做了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. easyUI类取嵌套的类型(pastJson结合)

    user类: @Entity@Table(name="c_user")public class User {      @Id @GeneratedValue(strategy=G ...

  2. HBase的基本架构及其原理介绍

    1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...

  3. 用profile分析算法性能

    在命令行输入:profile viewer 会出现如下图所示探查器: 在运行此代码的后面的输入框中输入要运行的程序,然后点击启动探查,就会自动探查. 探查结束之后,会给出每个函数的调用次数.运行时间等 ...

  4. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  5. prompt弹框返回输入的文本

    演示网址链接http://www.w3school.com.cn/jsref/met_win_prompt.asp <html> <head> <script type= ...

  6. net iis 部署中出现的问题及解决方案

    1.HTTP500.21 错误 解决方法:重新注册asp.net C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe –i ...

  7. python27(32位)安装RTree

    一开始用pip install -r requirements.txt 报错:OSError: could not find or load spatialindex_c.dll 1)从以下链接下载编 ...

  8. <转>人生与最速曲线

    看完你好象发现了什么o(∩_∩)o 来源网络 来自为知笔记(Wiz)

  9. php组合

    为了提高代码的复用性,降低代码的耦合(组合实现的两种方式) 模式一: <?php //组合模式一 class Person{ public function eat(){ echo " ...

  10. Dubbo学习 概念定义

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...