2009-07-25 59 views
5

Làm thế nào mà tôi có thể tạo ra một phương thức trong bộ điều khiển và chỉ cần đặt một số đối số và nó con số nó ra sau khi tôi bấm vào một hình thức gửi? Dưới mui xe, làm thế nào để nó tìm ra phương pháp đúng và làm thế nào nó tìm ra rằng tôi chỉ muốn những đối số?Làm thế nào để asp.net mvc tìm ra?

Trả lời

8

Tóm lại:

  1. Động cơ định tuyến xử lý các HttpRequest, và kiểm tra các URL được yêu cầu. Khi nó tìm thấy kết hợp tuyến đường đầu tiên, nó tạo ra một thể hiện mới là MvcRouteHandler và chuyển nó lên các mã thông báo bị hỏng của URL trong một RouteValueDictionary.

  2. Tuyến đường MvcRouteHandler nhận yêu cầu và cố gắng khởi tạo phiên bản lớp trình điều khiển. Theo quy ước, nó sẽ tìm một lớp được gọi là "XXXXXXController", trong đó X được thay thế bằng tham số {controller} trong tuyến.

  3. Sau khi tìm thấy bộ điều khiển, nó sẽ gọi phương thức thích hợp trên nó, được đưa ra bởi thông số {action} của tuyến đường. Bất kỳ đối số được đặt tên nào, chẳng hạn như {id}, tồn tại trong tuyến đường, được chuyển thành tham số cho phương thức.

Về cơ bản, mọi thứ mà ASP.Net MVC "biết" đều xuất phát từ thông tin tuyến đường. Nó không thể thần thánh các thông số từ không khí mỏng - chúng phải đến từ việc phân tích cú pháp tuyến đường. Nếu thông tin không có trong URL được yêu cầu, thông tin đó không thể được chuyển vào phương thức.

Cũng cần lưu ý rằng bạn có thể ghi đè hành vi của khung công tác bằng cách làm cho tuyến đường của bạn sử dụng trình xử lý thay thế thay vì MvcRouteHandler. Khung công tác khá mở rộng, vì vậy bạn có thể cắm chức năng tùy chỉnh ở nhiều điểm.

+0

Từ tuyến đường hoặc bộ sưu tập trường mẫu. – GalacticCowboy

+0

Bộ sưu tập trường biểu mẫu đi kèm với yêu cầu, nhưng nó không ảnh hưởng đến cách ASP.Net MVC tính toán mọi thứ. Biểu mẫu được đăng lên một URL đã cho (thường là cùng một bộ điều khiển đã tạo ra khung nhìn) và URL đó được xử lý bởi công cụ định tuyến. – womp

1

Có khá nhiều mã đang chạy cho điều khiển, độ phân giải hành động và chế độ xem, cũng như ModelBinders. Rất nhiều điều có thể là tốt nhất để bạn xem xét các phần cụ thể của khung công tác và hỏi một câu hỏi chi tiết hơn để nhận được nhiều câu trả lời.

May mắn thay, ASP.NET MVC framework has been open-sourced, vì vậy nếu bạn tò mò về cách hoạt động, bạn có thể get the code và tự mình xem xét. Mã tuyệt vời của nó để đọc qua và bạn chắc chắn sẽ học được điều gì đó.

Thêm vào điểm câu hỏi của bạn, tuy nhiên, bạn nên xem các lớp System.Web.Mvc.MvcHandler và System.Web.Mvc.ControllerActionInvoker, điều này sẽ dẫn bạn đến đúng đường dẫn để trả lời câu hỏi của bạn.

Các vấn đề liên quan