namespace ControllersAndActions.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));
}
}
}
可以通过实现IController接口来自定义controller,接收http请求,该请求使用RequestContext描述,并在其Execute方法中处理请求,生成应答内容。
System.Web.Mvc.Controller为我们实现了IController接口,并提供了三个特性:
- Action methods:Controller通过分析Url和Route规则来调用相应的Action method
- Action results:Action method处理完数据之后,可以返回一个Action result给Controller类,该类通过它或者生成一个view或者导航到别的页面等
- Filters:用于封装可重用的功能,可以由Controller类在Action method之前或之后调用
在Controller和View之间传递数据的方法:
// 通过View Model Object传递
public ViewResult Index()
{
DateTime date = DateTime.Now;
return View(date);
}
Accessing a View Model in a Razor View
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
The day is: @(((DateTime)Model).DayOfWeek)
A Strongly Typed View
@model DateTime
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
The day is: @Model.DayOfWeek
通过ViewBag传递
通过ViewData传递