在学习被停滞了N久以后,今天终于下定决心要继续了。过了太久堕落的生活也开始厌倦了。继续开始我的MVC学习之路。
目录机构:
models 文件夹: 模型组件 还可以存放有关数据访问操作的一些类、对象的操作的定义等。
Views 文件夹: 视图组件。可以存放的文件类型包括.aspx页面,.ascx控件以及.master母版页等。
Shared文件夹:视图组件中的公用部分。可以存放 母版页、CSS样式等文件。
Controllers文件夹:控制器组件。
在Web.Config中注册了 UrlRoutingModule类,用于解析URL路由。
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
在Global.asax文件中的Application_Start()方法中设置了URL路由,以及相关的路由逻辑。
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 = "" } // Parameter defaults ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } }
执行过程:
当执行基于ASP.NET 3.5 MVC 框架的MVCApplication网站时,根据浏览器中的URL地址,该URL地址首先被传递到URLRoutingModule 模块,该模块解析该URL地址,然后选择相关的URL路由,并得到兑现的IHttpContext对象来处理该URL路由。在默认情况下,该IHttpContext对象就是MvcHandler 对象。通过MvcHandler对象,选择相关的控制器来处理用户的请求。
执行步骤:
在基于ASP.NET 3.5 MVC 框架的MVCApplication网站中,每一个请求的页面都被映射到相应的控制器中的相关方法,控制器负责将制定的内容返回到浏览器中。多个页面可以被映射到同一个控制器中的不同方法。
在ASP.NET 3.5 MVC框架中,页面到控制器的映射是通过路径表(Route Table)而实现的,对于每一个应用程序有一个路径表。路径表通过RouteTable.Routes 属性表示。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );
当请求一个基于ASP.NET 3.5 MVC 框架的网站页面时,在Web.config配置文件中所配置是UrlRoutingModule模块解析该URL,并获得相关的RouteData对象,然后创建HttpHandler的实例化对象MvcHandler。
在执行MvcHandler时,调用几种的ProcessRequest()方法,执行该ProcessRequest()方法,从而创建一个控制器的实例化对象。
在执行Controller时,调用其中的Execute()方法,在该方法内部通过反射原理实现对指定其他方法的调用,在调用的方法中会执行View()方法,从而将指定页面的内容返回到浏览器中~
一个增删改查的例子:
HomeController:
[HandleError] public class HomeController : Controller { NorthwindEntities northwind = new NorthwindEntities(); public ActionResult Index() { var model = northwind.Categories.ToList(); return View(model); } public ActionResult About() { return View(); } [AcceptVerbs(HttpVerbs.Get)] public ActionResult Edit(int id) { var model = northwind.Categories.First(c => c.CategoryID == id); return View(model); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(int id,FormCollection from) { var model = northwind.Categories.First(c => c.CategoryID == id); UpdateModel(model,new [] {"CategoryName","Description"}); northwind.SaveChanges(); return RedirectToAction("index"); } [AcceptVerbs(HttpVerbs.Get)] public ActionResult Detail(int id) { var model = northwind.Categories.First(c => c.CategoryID == id); return View(model); } [AcceptVerbs(HttpVerbs.Get)] public ActionResult Create() { Categories categories = new Categories(); return View(categories); } public ActionResult Create(int CategoryID, FormCollection form) { var model = northwind.Categories.FirstOrDefault(c => c.CategoryID == CategoryID); if (model==null) { Categories categories = new Categories(); UpdateModel(categories, new[] {"CategoryName", "Description"}); northwind.AddToCategories(categories); northwind.SaveChanges(); return RedirectToAction("Index"); } else { return RedirectToAction("Create"); } } }
感觉刚刚看了点皮毛还是很简单的,不过以后在实用上面估计还是要多多下功夫的。加油吧。继续学习中……………………………………………………