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. 模拟n步一维随机游走的情况。

    package randomWalk; import java.util.Random; import java.util.Scanner; public class RandomWalk { pub ...

  2. 【风马一族_Android】Android 前端内容

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  3. 《自动共享LDAP用户并且访问其家目录》RHEL6

    实验的目的: 实现ldap服务器上的ldap用户被客户端访问,自动挂载到客户端,并且可以访问ldap用户的家目录. 服务端: 1.只需要配置文件: Iptables –F       关闭selinu ...

  4. ●linux进程的查看与操作●

    查看进程:ps -le | more ,ps -aux | more ,ps & 后台运行  jobs 查看后台进程  fg [n]调到前台  bg放到后台 ctrl +c 终止  ctrl ...

  5. LitJSON使用

    地址:http://lbv.github.io/litjson/docs/quickstart.html LitJSON Quickstart Guide Introduction Quick Sta ...

  6. WindowsMediaPlayer控件批量添加文件至播放列表

    思路: 1.读取批定路径的目录文件. 2.用List存放. 3.循环List列表添加到播放列表. public void VidieoPlay() { //WindowsMediaPlayer1.ui ...

  7. MotionEvent中getX()和getRawX()的区别

    http://blog.csdn.net/ztp800201/article/details/17218067 public class Res extends Activity implements ...

  8. 51nod1270 数组的最大代价(简单dp)

    ---恢复内容开始--- 1270 数组的最大代价 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 数组A包含N个 ...

  9. PyQt4学习笔记1:PyQt4第一个程序

    创建一个 PyQt4 一般可以通过很少的步骤完成.通常的方法是用Qt 提供的QtDesigner工具创建界面.使用QtDesigner,可以方便地创建复杂的GUI界面.然后,可以在窗口上创建部件, 添 ...

  10. RDD的转换操作---RDD转换过程

    1) union(otherRDD)RDD-->UnionRDD2) groupByKey(numPartitions)RDD-->ShuffledRDD-->MapPartitio ...