Cấp bậc tác giả:

TRAINING

[ASP.NET MVC]Bài 2: Giới thiệu về Controller trong ASP.NET MVC

Được viết bởi webmaster ngày 28/02/2023 lúc 08:59 PM
Trong ASP.NET MVC, Controller là thành phần chịu trách nhiệm xử lý các yêu cầu (request) của người dùng và trả về các kết quả tương ứng (response).
  • 0
  • 3490

[ASP.NET MVC]Bài 2: Giới thiệu về Controller trong ASP.NET MVC

1. Cách thức làm việc của Controller
Trong ASP.NET MVC, Controller là thành phần chịu trách nhiệm xử lý các yêu cầu (request) của người dùng và trả về các kết quả tương ứng (response).
cach-thuc-lam-viec-controller.jpg
Các bước cụ thể để xử lý một yêu cầu bao gồm:
  1. Người dùng tương tác với giao diện người dùng (UI) và tạo ra yêu cầu (request).
  2. Route engine nhận yêu cầu và xác định Controller phù hợp để xử lý yêu cầu.
  3. Route engine gọi phương thức xử lý (action method) tương ứng trong Controller.
  4. Phương thức xử lý thực hiện các xử lý logic (nếu có) để lấy dữ liệu từ Model hoặc thực hiện các thao tác cần thiết.
  5. Phương thức xử lý trả về một đối tượng ActionResult chứa dữ liệu cần trả về cho người dùng.
  6. View engine nhận kết quả trả về và tạo ra nội dung HTML tương ứng để hiển thị trên UI.
Một số điểm cần lưu ý về cách thức làm việc của Controller trong ASP.NET MVC:
  • Controller không trực tiếp tương tác với cơ sở dữ liệu hay các tài nguyên khác, mà thông qua Model để thực hiện các tác vụ liên quan đến dữ liệu.
  • Controller sử dụng các phương thức xử lý để thực hiện các tác vụ như hiển thị danh sách, thêm mới, sửa đổi, xóa bản ghi, và trả về các kết quả tương ứng.
  • Controller thường được sử dụng để xử lý các yêu cầu từ người dùng, thay đổi dữ liệu và thực hiện các tác vụ logic.
Một số thuộc tính của Controller như ViewBag, ViewData, TempData được sử dụng để truyền dữ liệu giữa Controller và View.

2. Hướng dẫn tạo Controller
Để tạo một Controller trong ASP.NET MVC, bạn có thể thực hiện theo các bước sau:
  1. Tạo một project ASP.NET MVC mới trong Visual Studio.
  2. Tạo một thư mục mới Area trong project để chứa Controller.
  3. Nhấp chuột phải vào thư mục mới và chọn Add -> Controller.
  4. Trong hộp thoại Add Scaffold, chọn tùy chọn "MVC Controller with views, using Entity Framework".
  5. Chọn một mô hình dữ liệu có sẵn hoặc tạo một mô hình mới.
  6. Chỉ định <tên>Controller và các tùy chọn khác theo ý của bạn và nhấp vào nút Add.
  7. Sau khi tạo xong, một file Controller mới sẽ được tạo ra với các action (phương thức) tương ứng. Bạn có thể chỉnh sửa các action này hoặc tạo thêm các action khác để xử lý các yêu cầu của ứng dụng web.
3. Cách thức làm việc của phương thức Action trong Controller
Trong ASP.NET MVC, các action method là các phương thức public được định nghĩa trong các controller, được sử dụng để xử lý các yêu cầu HTTP (HTTP request) của ứng dụng web. Action method có thể trả về một kết quả (result) để hiển thị cho người dùng hoặc thực hiện một số tác vụ xử lý dữ liệu và trả về một đối tượng dữ liệu.
Các action method có thể nhận các tham số từ yêu cầu HTTP, ví dụ như thông tin truy vấn (query string), thông tin biểu mẫu (form data), các tham số đường dẫn (route parameters) hoặc các giá trị được truyền dưới dạng tham số của phương thức.
Một số điểm cần lưu ý khi làm việc với Action method trong ASP.NET MVC:
  • Tên của action method có thể ảnh hưởng đến URL được sử dụng để truy cập vào action đó.
  • Action method có thể được truy cập thông qua địa chỉ URL, hoặc thông qua các chức năng khác của ứng dụng như form submit, ajax request, redirect, ...
  • Có thể sử dụng các attribute để thiết lập các thông tin liên quan đến action method, ví dụ như HttpGet, HttpPost, Authorize, AllowAnonymous, ...
  • Action method có thể trả về các loại kết quả khác nhau, ví dụ như ViewResult, PartialViewResult, JsonResult, FileResult, RedirectResult, ...
  • Action method có thể sử dụng các service và repository được đăng ký qua Dependency Injection để thực hiện các tác vụ xử lý dữ liệu.
  • Có thể sử dụng các phương thức hỗ trợ của ControllerBase để xử lý các yêu cầu HTTP, ví dụ như RedirectToAction, RedirectToRoute, PartialView, ...
Ví dụ về một action method đơn giản trong ASP.NET MVC:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to my website";
        return View();
    }
}
Trong ví dụ này, phương thức Index trả về một ViewResult, hiển thị trang chủ của ứng dụng web và đặt một thông báo vào ViewBag để truyền dữ liệu sang view.

4. Giải thích Action Result trong Controller và các phương thức của nó
ActionResult là một kiểu trả về từ một phương thức trong ASP.NET MVC Controller, và nó được sử dụng để trả về các kết quả khác nhau khi xử lý request.
Các phương thức Action Result thông thường được sử dụng trong ASP.NET MVC bao gồm:
  • ViewResult: Trả về một View (một trang web) trong ứng dụng.
  • PartialViewResult: Trả về một Partial View (một phần của một trang web) trong ứng dụng.
  • RedirectResult: Chuyển hướng request sang một URL khác.
  • RedirectToRouteResult: Chuyển hướng request đến một Route khác.
  • JsonResult: Trả về một kết quả dưới dạng JSON.
  • FileResult: Trả về một tập tin như một phản hồi cho request.
  • ContentResult: Trả về một chuỗi văn bản như một phản hồi cho request.
Ví dụ, để trả về một ViewResult, bạn có thể sử dụng phương thức View trong Controller như sau:
public ActionResult Index()
{
    return View();
}
Phương thức này sẽ trả về một ViewResult cho trang web Index trong ứng dụng.

5. Giải thích phương thức Invoking Action trong Controller
Phương thức Invoking Action trong Controller là một bước quan trọng trong chu trình xử lý yêu cầu của ứng dụng ASP.NET MVC. Nó xác định hành động (action) cần được gọi khi một yêu cầu HTTP được gửi đến ứng dụng.
Phương thức này được gọi bởi Route Engine khi nó xác định được Route phù hợp để xử lý yêu cầu. Nó tìm kiếm tên hành động trong Controller và gọi nó bằng cách sử dụng reflection. Sau đó, phương thức sẽ trả về một đối tượng ActionResult để Route Engine có thể xử lý và tạo ra phản hồi HTTP phù hợp.

Các bước thực hiện của phương thức Invoking Action trong Controller:
  1. Tạo một đối tượng ActionDescriptor, đại diện cho hành động (action) được gọi.
  2. Tạo một đối tượng ControllerContext, đại diện cho ngữ cảnh (context) của Controller.
  3. Gọi phương thức Execute() trên đối tượng ActionInvoker để thực thi hành động (action) được gọi.
  4. Trả về đối tượng ActionResult cho Route Engine.
Phương thức Invoking Action trong Controller có thể được tùy chỉnh bằng cách thay đổi hoặc mở rộng đối tượng ActionInvoker. Việc tùy chỉnh này cho phép bạn thêm các bước xử lý tùy chỉnh vào chu trình xử lý yêu cầu của ứng dụng.

6. Giải thích Passing Parameters trong Controller
Trong ASP.NET MVC, khi gọi một action của controller, chúng ta có thể truyền tham số đến action đó thông qua nhiều cách khác nhau.
Các cách truyền tham số:
  • Query string parameters: Thông qua URL, chúng ta có thể truyền các tham số bằng cách thêm vào đường dẫn (URL) của trang theo định dạng ?param1=value1&param2=value2. Ví dụ: /Products/Index?id=1&name=product1
  • Route parameters: Thông qua các route được cấu hình trên RouteConfig.cs, chúng ta có thể truyền các tham số vào action thông qua đường dẫn. Ví dụ: /Products/Details/1
  • Form parameters: Thông qua các input trong form HTML, chúng ta có thể truyền các tham số đến action thông qua HTTP POST request.
  • Body parameters: Chúng ta có thể truyền các tham số đến action thông qua HTTP POST request và đưa dữ liệu vào body của request.
Khi nhận được các tham số này, controller sẽ sử dụng chúng để thực hiện các xử lý, tính toán và trả về kết quả cho client.

7. Giải thích Routing Requests
Routing trong ASP.NET MVC là quá trình xác định Controller và Action phù hợp với URL được yêu cầu. Nó cho phép ứng dụng xác định cách thức xử lý yêu cầu HTTP dựa trên các yếu tố khác nhau của URL, chẳng hạn như đường dẫn và các tham số.
Trong ASP.NET MVC, ta có thể định nghĩa các route tùy chỉnh trong tệp RouteConfig.cs để xử lý các yêu cầu HTTP. Các route này được định dạng dưới dạng chuỗi, mô tả cấu trúc URL của request mà ta muốn xử lý và chỉ định Controller và Action để thực hiện công việc tương ứng.
Các route cơ bản được định nghĩa theo dạng "{controller}/{action}/{id}", trong đó:
  • "{controller}" là tên của Controller mà ta muốn sử dụng
  • "{action}" là tên của Action mà ta muốn gọi trong Controller
  • "{id}" là tham số tuỳ chọn truyền vào Action
Ví dụ: URL "/Home/Index/10" sẽ kích hoạt Action "Index" trong Controller "Home" và truyền giá trị 10 vào tham số "id" của Action.
Ngoài ra, ta cũng có thể định nghĩa các route tùy chỉnh, sử dụng các tiền tố và hậu tố, các điều kiện và ràng buộc URL để xử lý các yêu cầu HTTP phức tạp hơn.

8. Hướng dẫn cách sử dụng Routing trong ASP.NET MVC
Trong ASP.NET MVC, routing là cơ chế điều hướng request của người dùng tới các action method trong controller. Các route được định nghĩa trong tệp RouteConfig.cs trong thư mục App_Start của project.
Các bước để sử dụng routing trong ASP.NET MVC như sau:
Trong tệp RouteConfig.cs, sử dụng phương thức MapRoute để đăng ký các route. MapRoute có 3 tham số chính:
  • name: tên của route
  • url: định dạng url của route
  • defaults: các giá trị mặc định cho route
Ví dụ:
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Trong ví dụ này, route mặc định có tên "Default" được đăng ký, với định dạng url "{controller}/{action}/{id}". Nghĩa là, nếu người dùng truy cập đường dẫn "/Home/Index/1", request sẽ được định hướng tới action method có tên là "Index" trong controller có tên là "Home". Tham số "id" sẽ được truyền vào action method với giá trị là 1.
Để sử dụng các tham số được truyền vào url trong action method, ta có thể sử dụng các tham số của action method với cùng tên như trong url. Ví dụ:
public ActionResult Index(string id)
{
    ViewBag.Message = "Parameter id = " + id;
    return View();
}
Trong đoạn mã này, ta đã sử dụng tham số "id" trong action method để lấy giá trị tham số được truyền vào url.
Nếu muốn định nghĩa một route tùy chỉnh, ta có thể sử dụng các định dạng regular expression để xác định các điều kiện cho route. Ví dụ:
routes.MapRoute(
    name: "CustomRoute",
    url: "Products/{id}",
    defaults: new { controller = "Products", action = "Details" },
    constraints: new { id = @"\d+" }
);
Trong đoạn mã này, ta đã định nghĩa một route tùy chỉnh có tên là "CustomRoute", với định dạng url là "/Products/{id}". Điều kiện cho route là tham số "id" phải là một số nguyên dương, được xác định bằng regular expression @"\d+". Nếu điều kiện được thỏa mãn, request sẽ được định hướng tới action method có tên "Details" trong controller có tên là "Products". Nếu không có điều kiện nào được thỏa mãn, routing engine sẽ tiếp tục tìm kiếm route khác để xử lý request.

9. Hướng dẫn đăng ký Default Route
Để đăng ký một Default Route cho ứng dụng ASP.NET MVC, ta sử dụng phương thức MapRoute của đối tượng RouteCollection.
Mặc định, file RouteConfig.cs trong thư mục App_Start của project ASP.NET MVC sẽ chứa phương thức RegisterRoutes được gọi trong phương thức Application_Start của file Global.asax.
Để đăng ký một Default Route, ta có thể thêm các thông số của Route vào phương thức RegisterRoutes bằng cách sử dụng phương thức MapRoute như sau:
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
  • Trong đó:
  • name: Tên của Route. Ví dụ "Default".
  • url: Mẫu URL. Ví dụ "{controller}/{action}/{id}".
  • defaults: Giá trị mặc định của Route, gồm các thông số {controller}, {action} và {id}.
Trong ví dụ trên, mẫu URL là "{controller}/{action}/{id}". Điều này có nghĩa là ứng dụng sẽ tìm kiếm một Controller và một Action tương ứng với tên được truyền vào URL. Tham số {id} là tùy chọn, vì vậy nó có thể được bỏ qua. Nếu không có giá trị nào được truyền vào {controller} và {action}, mặc định là Home/Index.
Với Default Route này, ví dụ URL "/Home/About" sẽ được xử lý bởi Action "About" của Controller "Home". Tương tự, URL "/Product/Details/5" sẽ được xử lý bởi Action "Details" của Controller "Product", và tham số "id" sẽ có giá trị là 5.
Sau khi đăng ký Default Route, các Route khác có thể được đăng ký bổ sung. Tuy nhiên, nếu không có Route nào khớp với URL được yêu cầu, Route mặc định sẽ được sử dụng.

10. URL Patterns là gì
Trong ASP.NET MVC, URL Patterns (mẫu URL) được sử dụng để xác định cách thức mapping (ánh xạ) giữa URL của request và các action trong controller để xử lý request đó. Mẫu URL có thể được định nghĩa bằng cách sử dụng các biến định danh (placeholders) để tạo ra các mẫu URL linh hoạt và dễ dàng quản lý.
Mẫu URL được đăng ký trong RouteConfig.cs (trong thư mục App_Start) bằng cách sử dụng phương thức MapRoute của đối tượng RouteCollection. Một mẫu URL đơn giản có thể được đăng ký như sau:
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Trong đó, {controller}, {action} và {id} là các biến định danh và sẽ được ánh xạ vào tên controller, tên action và tham số id trong action tương ứng. Mẫu URL trên sẽ mapping tất cả các request có URL theo dạng http://domain.com/Controller/Action/Id.
Ngoài ra, ASP.NET MVC cũng hỗ trợ nhiều kỹ thuật routing khác nhau, cho phép đăng ký các mẫu URL phức tạp hơn và xử lý các trường hợp đặc biệt.

11. Ordering Routes là gì
Trong ASP.NET MVC, ordering routes là quá trình xác định thứ tự ưu tiên của các route để xử lý các request từ client. Khi một request được gửi đến ứng dụng, route engine sẽ duyệt qua danh sách các route được đăng ký để tìm ra route phù hợp nhất với URL của request đó. Do đó, ordering routes đóng vai trò quan trọng để xác định route nào sẽ được sử dụng đầu tiên trong trường hợp có nhiều route có thể phù hợp với request.
Có nhiều cách để ordering routes trong ASP.NET MVC, bao gồm:
  • Đăng ký các route theo thứ tự ưu tiên trong tệp RouteConfig.cs.
  • Sử dụng thuộc tính RoutePrefix để xác định tiền tố cho một nhóm route.
  • Sử dụng thuộc tính RouteOrder để chỉ định thứ tự ưu tiên cho một route cụ thể.
Sử dụng các chiến lược xử lý route tùy chỉnh để xác định cách thức ordering routes theo cách phù hợp với yêu cầu của ứng dụng.

12. Constraining Route là gì
Trong ASP.NET MVC, Constraining Route là một kỹ thuật được sử dụng để giới hạn hoặc xác định các ràng buộc (constraints) của một Route. Các ràng buộc này có thể được sử dụng để kiểm soát định dạng hoặc giá trị của các thông số truyền vào trong URL, từ đó đảm bảo tính hợp lệ và bảo mật của dữ liệu.
Các ràng buộc có thể được áp dụng trên một hoặc nhiều phần của URL, chẳng hạn như định dạng của tham số, giá trị có thể chấp nhận được cho tham số, hoặc kết hợp cả hai. Khi một URL được gửi đến ứng dụng, các ràng buộc này được áp dụng theo thứ tự đã xác định để tìm ra Route phù hợp nhất.
Để định nghĩa các ràng buộc, ta có thể sử dụng các lớp ràng buộc có sẵn như RegularExpressionRouteConstraint để xác định định dạng của một tham số hoặc RangeRouteConstraint để giới hạn giá trị của một tham số. Ngoài ra, ta cũng có thể tạo các lớp ràng buộc tùy chỉnh để đáp ứng các yêu cầu cụ thể của ứng dụng.

13. Ignoring Route là gì
Trong ASP.NET MVC, Routing Engine có nhiệm vụ phân tích URL và đưa ra quyết định xem URL đó sẽ được xử lý bởi Action nào trong Controller nào. Tuy nhiên, đôi khi chúng ta muốn loại bỏ một số URL ra khỏi quá trình routing, để chúng không bị xử lý bởi Routing Engine và được xử lý bởi các thành phần khác trong ứng dụng.
Ví dụ, nếu trong ứng dụng của bạn có các file tĩnh như file CSS, JavaScript, hình ảnh, hoặc các file khác không cần được xử lý bởi Routing Engine, bạn có thể sử dụng phương thức IgnoreRoute() để loại bỏ những URL này khỏi quá trình routing.
Cú pháp sử dụng phương thức IgnoreRoute() như sau:
routes.IgnoreRoute("url-pattern");
Trong đó, url-pattern là một chuỗi biểu thị cho một hoặc nhiều URL pattern muốn loại bỏ khỏi quá trình routing.
Ví dụ:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
Dòng mã trên sẽ loại bỏ tất cả các URL có dạng {resource}.axd/{*pathInfo} khỏi quá trình routing. Các URL này thường được sử dụng để truy cập các tài nguyên như file CSS, JavaScript, hình ảnh được lưu trữ trong thư mục App_Themes, App_WebResources, hoặc các thư mục khác trong ứng dụng.

Xem thêm clip tại đây:

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML