http://www.cnblogs.com/errorif/archive/2009/02/13/1389927.html

为了完全了解Asp.net MVC是怎样工作的,我将从零开始创建一个MVC应用程序。

1.创建一个新的ASP.Net Web Application。它包括有一个Default.aspx页面,一个标准的web.config文件和添加一些初始的引用。

2.添加对“System.Web.Abstractions.dll”、“System.Web.Routing.dll” 和“System.Web.Mvc.dll”的引用,所有的这些都可以在“c:\Program Files\Microsoft ASP.NET\ASP.NET MVC Beta\Assemblies”文件夹中找到(译注:即Asp.net MVC的安装路径)。

使用MvcHttpHandler来处理MVC请求。打开Default.aspx的Code-behind文件(Default.aspx.cs)。在Page_Load方法中,以MVC的方式来处理请求。

protected void Page_Load(object sender, EventArgs e)
{
  HttpContext.Current.RewritePath(Request.ApplicationPath);
  IHttpHandler httpHandler = new MvcHttpHandler();
  httpHandler.ProcessRequest(HttpContext.Current);
}
 

3.添加一个全局应用程序类(global.asax)。在Application_Start方法中,映射Route到Home Controller。

protected void Application_Start(object sender, EventArgs e)
{
  RouteTable.Routes.MapRoute("Default Route",
    "{controller}/{action}",
    new { controller = "Default", action="Index" });
}
 

4.为了使用MapRoute和IgnoreRoute方法,你必须先using System.Web.Mvc命名空间(因为它们是扩展方法)。MapRoute方法以route的名字作为第一个参数,以URI模板为第二个参数(译注:如"{controller}/{action}"),以默认值为第三个参数。应该注意到,默认值对象应该有属性来匹配URI模板中的属性的(译注:如上面代码中,默认值对象有两个属性:controller和action,用来匹配URI模板中的{controller}和{action})。上面的route映射一个Url到Contoller和Action。

5.创建一个默认的Controller。在Web Application的Controllers文件夹中创建一个类,命名为DefaultController。注意到这里的命名约定;Default是route的默认值,而"Controller"只是命名约定中约定的一个后缀名。

Controller类应该继承自System.Web.Mvc.Controller,同时应该包括一个public的方法作为Action。因为默认的Action是Index(从默认的route中可以看出),这个类应该看起来像这样:

public class DefaultController : Controller
{
  public string Index() 
  {
    return "Hello, world";
  }
}
 

6.运行应用程序,导航到应用程序的目录(“/”),你可以看到得到的响应是“hello,world”。

但是如果你尝试导航到Default Controller的Index Action(/Default/Index)时,将会得到一个错误信息。

7.添加Url Routing Module.打开web.config,定位到<system.web>下的<httpModules>,添加Url Routing Module:

<httpModules>
  ...  
<add name="UrlRoutingModule"
       type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, 
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
 

8.运行该应用程序,导航到Default控制器的Index Action。现在你应该可以看到得到的响应结果跟之前的是一样的。

9.以一个View作为Index Action的返回值。更改Default Controller的Index Action的返回值为ActionResult。这里可以返回很多种类型的Result(比如JsonResult、ContentResult等等)。在本例中,我们将返回一个ViewResult。

public ActionResult Index()
{
  return View();
}

创建该Action对应的View页面。当调用一个无参的View()方法时,它会在跟Controller同名的文件夹中查找跟Action方法同名的View页面。现在在Views\Default\文件夹下创建一个新的页面:Index.aspx。

为了让该页面成为MVC的View,打开code behind的文件(Index.aspx.cs),让该类继承自System.Web.Mvc.ViewPage。

修改该页面(在Design模式或者Source模式),添加问候信息:

<body>
  <form id="form1" runat="server">
    <div>
      <h1>Hello, world</h1>
    </div>
  </form>
</body>
 

10. 运行该应用程序,你应该可以接收到从我们刚刚创建的View页面中发出的响应信息。Routing引擎调用Default Controller的Index Action,返回View页面(Index.aspx)。

11. 显示View页面的数据。打开Controller,找到Index方法,添加数据到ViewData字典中。

public ActionResult Index()
{
  ViewData["name"] = "Guy";
  return View();
}

现在,在View页面,在问候语那行中使用该数据。

<body>
  <form id="form1" runat="server">
    <div>
      <h1>Hello, <%= ViewData["name"] %></h1>
    </div>
  </form>
</body>


12.运行应用程序,可以看到在Controller中添加进去的数据。

在这篇文章中,我从零开始创建了一个Asp.net MVC应用程序,用以剖析Asp.net MVC和了解在框架背后的神奇的东西。通过这可以帮助我在现有的Web Application中使用MVC。

原作者:Guy Burstein
原文地址:Anatomy of an ASP.Net MVC Application
翻译:Inrie (洪晓军)

[转]剖析ASP.Net MVC Application的更多相关文章

  1. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  2. Implementing HTTPS Everywhere in ASP.Net MVC application.

    Implementing HTTPS Everywhere in ASP.Net MVC application. HTTPS everywhere is a common theme of the ...

  3. [转]Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10)

    本文转自:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/creating-a ...

  4. [转]Sorting, Filtering, and Paging with the Entity Framework in an ASP.NET MVC Application (3 of 10)

    本文转自:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/sorting-fi ...

  5. Migrating an ASP.NET MVC application to ADFS authentication

    I recently built an ASP.NET application at work to help track internal use of our products. It's bee ...

  6. MVC架构剖析--ASP.NET MVC图解(二)

  7. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

  8. ASP.NET MVC 5 - 查询Details和Delete方法

    在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...

  9. ASP.NET MVC 5 - 给电影表和模型添加新字段

    在本节中,您将使用Entity Framework Code First来实现模型类上的操作.从而使得这些操作和变更,可以应用到数据库中. 默认情况下,就像您在之前的教程中所作的那样,使用 Entit ...

随机推荐

  1. Codevs 1003 电话连线

    时间限制: 1 s   空间限制: 128000 K   题目等级 : 黄金 Gold 题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当 ...

  2. [Guava源码分析]Ordering:排序

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3876466.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  3. 麦子学院Android开发Java教程ClassCastException 错误解析

    现在Java编程中经常碰到ClassCastException 错误,ClassCastException 是 JVM 在检测到两个类型间的转换不兼容时引发的运行时异常.此类错误通常会终止用户请求.本 ...

  4. CentOS 6.X安装LAMP最高版本环境

    #------------CentOS .X安装LAMP最高版本环境------------------ #! /bin/sh   #安装Apache yum install httpd -y #.关 ...

  5. php curl post

    public static function curlPost($url, $data=array()) {        $ch = curl_init();        if (is_array ...

  6. 亚马逊左侧导航(jquery.menuaim.js)

    jquery.menuaim.js     主菜单 <div class="active"> <ul class="dropdown-menu" ...

  7. PHP获取Cookie模拟登录CURL

    要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...

  8. DataSnap中连接池的应用

    当开发人员开始创建Delphi的DataSnap应用时很常见的数据库连接定义方式是每个数据模块建立一个连接.这样做将产生大量的数据库连接,并产生很多问题.从Delphi XE开始,EMB提供了Sess ...

  9. hadoop启动后jps 没有namenode

      hadoop集群启动后,jps 发现没有namenode. 网上查了下,这问题可能是由于两次或两次以上格式化NameNode造成的. 因为我的是刚刚新搭建的集群,里面没什么资料,所以我直接删除各个 ...

  10. H5不能少的功能-滑动分页

    // 滑动分页 $(window).scroll(function() {                   var mayLoadContent = $(window).scrollTop() & ...