首页 > 代码库 > 控制器介绍

控制器介绍

新建立MVC3项目,名为12-1ControllersAndActions,使用空模板。

Global.asax中默认的路由定义为:

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

1、用IController创建控制器

在MVC框架中,控制器类必须实现System.Web.Mvc命名空间的IController接口。

System.Web.Mvc.IController接口如下所示:

public interface IController
{
    void Execute(RequestContext requestContext);
}

接口只有一个方法Execute,在请求目标控制器时将被调用。

通过实现IController,就可以创建控制器类,但这是一个相当低级的接口,要做大量工作才能让自己创建的控制器有效,下面只是一个简单的演示。

鼠标右击项目中的Controllers文件夹,选择 Add -> Class,创建新类,取名为BasicController,代码如下:

namespace _12_1ControllersAndActions.Controllers
{
    public class BasicController:IController
    {
        public void Execute(RequestContext requestContext)
        {
            string controller = (string)requestContext.RouteData.Values["controller"];
            string action = (string)requestContext.RouteData.Values["action"];
            requestContext.HttpContext.Response.Write(
                string.Format("Controller:{0}, Action:{1}", controller, action));
        }
    }
}

 如果运行程序,导航到"~/Basic/Index",根据路由定义,也可以导航到"~/Basic",产生的结果为:

Controller:Basic,Action:Index

 

2、一般的做法是创建派生于Controller类的控制器

鼠标右击项目中的Controllers文件夹,选择 Add -> Controller,新建控制器,命名为DerivedController,代码如下:

namespace _12_1ControllersAndActions.Controllers
{
    public class DerivedController : Controller
    {
        //
        // GET: /Derived/

        public ActionResult Index()
        {
            ViewBag.Message = "Hello from the DerivedController Index method.";
            return View("MyView");
        }

    }
}

在方法Index上鼠标右键,添加视图,视图取名为MyView

/Views/Derived/MyView.cshtml

@{
    ViewBag.Title = "MyView";
}

<h2>MyView</h2>
<h1>Message: @ViewBag.Message</h1>