在学习被停滞了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");
}
}
}
感觉刚刚看了点皮毛还是很简单的,不过以后在实用上面估计还是要多多下功夫的。加油吧。继续学习中……………………………………………………