初识 ASP.NET 3.5 MVC 开发

在学习被停滞了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");
            }
        }

    }

感觉刚刚看了点皮毛还是很简单的,不过以后在实用上面估计还是要多多下功夫的。加油吧。继续学习中……………………………………………………

原文地址:https://www.cnblogs.com/dupeng0811/p/1574974.html