上篇介绍了MVC2后,相信你肯定不屑一顾,那么好吧,我承认……现在正式开始介绍吧
ASP.NET MVC2的处理顺序为routes->controller->action(model)->view,而表现形式就是有一个路由表在Global.aspx.cs中,将Url解析后,传递数据到专门的Controller中的一个Action去处理(在XXXController.cs中),然后返回View(在XXX文件夹下的actionName.aspx中)注意,actionName与Controller中的处理的Action的名称最好相同,而Controller前面的XXX也必须和XXX文件夹的命名必须相同。
先从Global.aspx.cs开始吧,这就是传说中的路由Route,那么先贴上它的代码
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
//忽略对.axd文件的Route,也就是直接去访问.axd文件,而其中的*就是匹配所有的在axd后面跟的所有参数
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()//Web程序就从这里开始运行滴~
{
AreaRegistration.RegisterAllAreas();//注册所有的区域
RegisterRoutes(RouteTable.Routes);//开始路由分发
}
}
注意看routes.MapRoute这个函数,相信一看就明白,就是将Url参数分别解析为controller、action以及id,比如这样一个Url:http://127.0.0.1/Home/About/10,那么对应的controller为Home,action为About,而Iid为10。
于是,我们就可以自己写route了,比如
routes.MapRoute(
"History",
"Histroy/{year}/{moonth}/{day}",
new { controller = "Home", action = "Histroy",year= = "years",month = "month",day = "day"}
);
现在,我们就可以访问这样一个链接了:http://127.0.0.1/History/2011/6/21,于是,路由就会将信息传递到Home这个Controller里的一个叫History的Action去处理了,而传入的"日期“就是2011年7月22日,不理解?不急,还没讲到。
需要注意的是
- 如果是有多个route的话,特殊的route需要放到一般的route之前,否则route将可能不会起作用,因为,路由表就是一个一个去匹配查找,如果在你写的route之前有同样匹配的route,那么你的route将可能永远不会被匹配到。
- controller以及Action的定义是必须的,否则信息将可能不会得到专门的Action处理
- 更多精彩内容在http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
然后,以http://127.0.0.1/的例子来继续解说,看上面的的route,当没有参数传入时,默认的controller为Home,而Action为Index,于是,信息数据传递到HomeController.cs中文件中的Index()去处理,不信?好吧,你调试一下就知道了~
下面是HomeCotroller.cs
namespace MvcApplicationTest.Controllers
{
[HandleError]//错误处理,下次再讲~
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "欢迎使用 ASP.NET MVC!";//这就是之前介绍的那张图片中的那个字符串的由来,怎么传过去的呢?先记住ViewData
return View();//返回view,将信息交由Home文件夹下的Index.aspx去处理
}
public ActionResult About()
{
return View();
}
}
}
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
主页
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: ViewData["Message"] %></h2><!--看到这里就明白了吧,ViewData就是用来传递数据的-->
<p>
若要了解有关 ASP.NET MVC 的更多信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC 网站">http://asp.net/mvc</a>。
</p>
</asp:Content>
然后,通过上面的页面处理之后,生成html返回到客户端~