ASP.NET MVC 具体实现细节
来源:互联网 发布:c语言标识符的命名规则 编辑:程序博客网 时间:2024/05/16 06:45
上篇介绍了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返回到客户端~
- ASP.NET MVC 具体实现细节
- ASP.NET MVC中RESTful原教旨主义者的两个实现细节
- 自己实现Asp.NET MVC
- ASP.NET MVC分页实现
- Asp.net MVC scheduler实现
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
- Asp.net MVC 实现图片上传剪切
- asp.net mvc批量删除的实现
- ASP.NET MVC实现验证码功能
- asp.net mvc分页的实现 mvcpaging
- ASP.NET MVC实现仪表程序
- 无限级分类Asp.net Mvc实现
- asp.net mvc如何实现下载文件
- ASP.NET MVC实现验证码功能
- asp.net mvc跳转提示实现
- ASP.NET MVC实现剪切图片
- ASP.NET MVC 4实现局部刷新
- asp.net mvc如何实现文件下载
- 在32位Ubuntu10.04上编译Android2
- 类模板与模板类
- 简单的模拟!!!
- android WIFI 总结
- VS 中工具箱重复的问题
- ASP.NET MVC 具体实现细节
- 50种思维方式
- Linux中的同步机制 -- Futex
- JavaScript中call和apply方法
- 职业规划要趁早——关于职业的选择和工作的动力的听课感想
- zoj1107记忆化搜索
- C++自己实现list
- GDB 调试子进程
- Safari develop print large text var in javascript