当前位置 > 首页 > Asp.net

Asp.Net MVC 3【Controllers And Actions】

2012-9-6 17:07:00来源:Asp.net

这里分享一下MVC框架里的Controller("控制器")和Action("动作/方法"),我将告诉你如何实现控制器和不同的方式,你可以使用控制器接收和生成输出。 MVC框架不限制您通过视图生成HTML,我们将讨论其他可用的选项。我们还将展示如何操作方法使易于单元测试,并演示如何测试每一种结果,只需要一个动作("Action")方法即可。

介绍控制器("Controller")

关于Controller("控制器")的代码,估计大家也看到不少了,今天我们深入的看看这个控制器的内幕吧!

首项我们准备一个项目("MvcControllers"),接下来我们创建一个 IController接口,并且让所有的Controller("控制器")都实现该接口。项目整体结构如下图1.

图1.IController的接口内容,大概为下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web.Routing;namespace MvcControllers.Interface{    public interface IController    {        void Execute(RequestContext requestContext);    }}

这是一个非常简单的接口。调用的唯一方法,当一个执行请求是针对控制器类。 MVC框架知道哪个控制器类已针对要求读取控制器路由数据所产生的属性的值。你可以选择创建控制器类通过实现IController,但它是一个相当低级接口,并且您必须做很多工作要完成什么有用的东西。我们搞一个简单的控制器('BasicController')提来供了一个演示。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;namespace MvcControllers.Controllers{    public class BasicController : IController    {        public void Execute(RequestContext requestContext)         {            //Controller Info            string controller = (string)requestContext.RouteData.Values["controller"];            //Action Info            string action = (string)requestContext.RouteData.Values["action"];            //Out            requestContext.HttpContext.Response.Write(string.Format("Controller:{0},Action:{1}", controller, action));        }    }}

好的,实现这个简单接口后,我们来运行一下,结果如下图2.

图2.实现IController接口允许您创建一个类,MVC框架认识到作为一个控制器和发送请求,但是它将很难编写一个复杂的应用程序。但是你可以使用MVC框架实现更强大的你想要的结果。

创建一个控制器从控制器类派生出来的

MVC框架是无休止地自定义和扩展。您可以实现IController接口来创建你需要的任何类型的请求处理结果的产生。不喜欢行动的方法呢?渲染视图不关心?然后,你可以在你自己手中事项和写一个更好,更快,更优雅的方式处理请求。或者你可以使用的特点,即MVC框架团队,这是实现派生控制器System.Web.Mvc.Controller 类。

System.Web.Mvc.Controller的类提供支持,最MVC请求处理开发人员会很熟悉。这是我们在所有的例子在前面的章节中已经使用。控制器类中提供了三个主要特点:

  •  操作方法:控制器的行为被划分为多个方法(而不是只是一个单一的Execute()方法)。每个操作方法暴露于不同的URL,并调用带参数的提取传入的请求。
  • 行动结果:您可以描述一个动作的结果返回一个对象(例如,渲染视图,或重定向到一个不同的URL或操作方法),然后以您的名义进行的。指定结果之间的分离和执行简化单元测试。
  • 过滤器:可以封装可重复使用的行为过滤器,每一个行为,然后标记上的一个或多个控制器或动作方法将在源代码中的[Attribute](属性)。

为了更好的推导出来Controller类,我们创建一个新的Controller类,叫"DerivedController",具体代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace MvcControllers.Controllers{    public class DerivedController : Controller    {        //        // GET: /Derived/        public