[转]剖析ASP.Net MVC Application
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的更多相关文章
- 源码学习之ASP.NET MVC Application Using Entity Framework
源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...
- Implementing HTTPS Everywhere in ASP.Net MVC application.
Implementing HTTPS Everywhere in ASP.Net MVC application. HTTPS everywhere is a common theme of the ...
- [转]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 ...
- [转]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 ...
- 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 ...
- MVC架构剖析--ASP.NET MVC图解(二)
- Java进击C#——应用开发之Asp.net MVC
本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...
- ASP.NET MVC 5 - 查询Details和Delete方法
在这部分教程中,接下来我们将讨论自动生成的Details和Delete方法. 查询Details和Delete方法 打开Movie控制器并查看Details方法. public ActionResul ...
- ASP.NET MVC 5 - 给电影表和模型添加新字段
在本节中,您将使用Entity Framework Code First来实现模型类上的操作.从而使得这些操作和变更,可以应用到数据库中. 默认情况下,就像您在之前的教程中所作的那样,使用 Entit ...
随机推荐
- 工厂方法(Factory Method)模式
一.工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟的子类中. 工厂方法模式是简单工厂 ...
- 非常难得的iPad版房地产售楼助手应用
一款高质量的iPad房地产售楼助手应用,采用的是类似facebook,新浪微博,腾讯微博,人人网的布局视图.功能有:客户管理系统(可添加,编辑等):2.房源管理系统;3.房贷计算器等,这个应用无论是布 ...
- [Jsp]防止页面表单重复提交的解决方法
个人学习笔记,写下方便以后复用. 当我们写了个注册页面时候,用户完成注册并提交,用户注册的资料并录入数据库保存,最不希望出现的是在一个会话中出现多次提交的结果,我们可以通过为请求设置标记来避免此类事件 ...
- [转]Linux 分区 swap
如何合理设置Linux的swap分区 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://commandos.blog.51cto.c ...
- Android发送请求到不同的Servlet,但都是一个Servlet处理
错误原因,在Servlet文件中 @WebServlet("/ServletForGETMethod") 与实际的ServletForQUERYMethod 文件名不符. @Web ...
- Excel多条件筛选、公式填充
接到一个任务,由于数据操作人员不会使用编辑公式进而无法进行相关筛选,所以要我帮忙.好久不碰Excel了,那就试试看吧. 需求是这样子的(这里做了最大化的简化):要求判断条件,男50岁以上,女40岁以上 ...
- jquery ready()的几种实现方法小结
几种jQuery的ready ()的写法. 1.最常用也是最标准的 $(document).ready(){ }); 2.是上面的简写: $(function(){ }) 很奇怪?为什么能 ...
- String与StringBuffer对象问题
下面的代码创建了三个String对象,其中pool中一个,heap中两个 String s1 = new String("abc"); String s2 = new String ...
- Ubuntu修改密码长度太短或太简单解决
在安装 Ubuntu 的时候建立的帐户 sai,想把密码改成两个字母aa,方便输入. 运行终端 sai@xmomx:~$ passwd sai更改 sai 的密码.(当前)UNIX 密码: xx输入新 ...
- Google Code Jam 2015 Round1A 题解
快一年没有做题了, 今天跟了一下 GCJ Round 1A的题目, 感觉难度偏简单了, 很快搞定了第一题, 第二题二分稍微考了一下, 还剩下一个多小时, 没仔细想第三题, 以为 前两个题目差不多可以晋 ...