新建立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>