Thứ Bảy, 24 tháng 11, 2012

Tổng quan ASP.NET MVC Routing

Trong hướng dẫn này, bạn sẽ được giới thiệu với một tính năng quan trọng của mọi ứng dụng ASP.NET MVC ASP.NET gọi là định tuyến. The ASP.NET Routing module có trách nhiệm lập bản đồ các yêu cầu trình duyệt gửi tới các action cụ thể Controller MVC. Đến cuối này, bạn sẽ hiểu thế nào là con đường tiêu chuẩn bảng yêu cầu bản đồ để Controller Action.

Sử dụng mặc định Route Table
Khi bạn tạo một mới ứng dụng ASP.NET MVC, ứng dụng đã được cấu hình để sử dụng ASP.NET Routing. ASP.NET định tuyến được thiết lập tại hai nơi.

Trước tiên, ASP.NET định tuyến được kích hoạt trong tập tin cấu hình ứng dụng của bạn Web (web.config file). Có bốn phần trong file cấu hình có liên quan đến việc định tuyến: phần system.web.httpModules, phần system.web.httpHandlers, phần system.webserver.modules, và phần system.webserver.handlers. Hãy cẩn thận không để xóa những phần này vì không có các phần định tuyến sẽ không còn làm việc.

Thứ hai, và quan trọng hơn, một bảng tuyến đường được tạo ra trong file Global.asax của ứng dụng. File Global.asax là một file đặc biệt có chứa bộ xử lý sự kiện cho ASP.NET sự kiện vòng đời ứng dụng. Bảng lộ trình được tạo ra trong sự kiện Đơn Bắt đầu.

Các tập tin trong 1 danh mục chứa các file Global.asax mặc định cho một ứng dụng ASP.NET MVC.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,

public class MvcApplication : System.Web.HttpApplication
{
       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);
      }
}
}

Khi một ứng dụng MVC đầu tiên bắt đầu, các method Application_Start() được gọi. method này, đến lượt nó, gọi RegisterRoutes(). Các method RegisterRoutes() tạo route table.

Mặc định route table có một con đường duy nhất (có tên mặc định). Các bản đồ mặc định phân tuyến đoạn đầu tiên của một URL để một tên điều khiển, phân khúc thứ hai của một URL cho một Controller Action, và đoạn thứ ba đến một tham số có tên là id.

Hãy tưởng tượng rằng bạn nhập URL sau đây vào thanh địa chỉ trình duyệt web của bạn: /Home/Index/3

Các mặc định bản đồ tuyến đường URL để các thông số sau:

controller = Home
action = Index
id = 3

Khi bạn yêu cầu URL /Home/Index/3, các code sau đây được thực thi: HomeController.Index(3)

Các tuyến đường mặc định bao gồm giá trị mặc định cho tất cả ba thông số. Nếu bạn không cung cấp một bộ điều khiển, sau đó điều khiển các thông số mặc định để các chủ giá trị. Nếu bạn không cung cấp một hành động, các tham số hành động mặc định theo Chỉ số giá trị. Cuối cùng, nếu bạn không cung cấp một id, các thông số mặc định id cho một chuỗi rỗng.

Hãy xem xét một số ví dụ về cách các tuyến đường mặc định bản đồ các URL để hành động điều khiển. Hãy tưởng tượng rằng bạn nhập URL sau đây vào thanh địa chỉ trình duyệt của bạn: /Home

Bởi vì các thông số mặc định mặc định đường đi, cách nhập URL này sẽ gây ra Index() phương thức của lớp HomeController trong danh mục 2 để được gọi.

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
        [HandleError]
        public class HomeController : Controller
       {
              public ActionResult Index(string id)
             {
                     return View();
             }
       }
}

Trong danh mục 2, class HomeController bao gồm một method đặt tên là Index() chấp nhận một tham số đơn Mã đặt tên. URL /Home làm cho method Index() có thể được gọi với một chuỗi rỗng như giá trị của tham số ID.

Bởi vì các cách mà framework MVC invokes Controller action, URL /Home cũng phù hợp với method Index() của lớp HomeController trong danh mục 3.

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
        [HandleError]
        public class HomeController : Controller
       {
                public ActionResult Index()
                {
                        return View();
                }
        }
}

Method Index() trong danh mục 3 không chấp nhận bất kỳ thông số. URL /Home này sẽ được gọi là method Index(). URL /Home/Index/3 cũng invokes phương pháp này(Mã là bỏ qua).

URL /Home phù hợp với method Index() của lớp HomeController trong danh mục 4.

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
         [HandleError]
         public class HomeController : Controller
         {
                 public ActionResult Index(int? id)
                {
                          return View();
                }
         }
}

Trong 4 danh mục, method Index() có một tham số Integer. Bởi vì tham số này là một tham số nullable (có thể có giá trị Null), Index() có thể được gọi là lỗi.

Cuối cùng, method Index() trong danh mục 5 với URL /Home gây ra một ngoại lệ từ các tham số ID không phải là một tham số nullable. Nếu bạn cố gắng gọi method Index() sau đó bạn nhận được lỗi hiển thị trong hình 1.

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
         [HandleError]
         public class HomeController : Controller
         {
                public ActionResult Index(int id)
               {
                       return View();
               }
         }
}

Không có nhận xét nào:

Liên kết quảng cáo :