ASP.NET MVC 具体实现细节

上篇介绍了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();
        }
    }
}



然后,就是Home文件夹下的Index.aspx

<%@ 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返回到客户端~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值