2010-12-14 11 views

Trả lời

10

Trên thực tế, họ đang điểm chỉ khác nhau trong MVC đường ống dẫn thực hiện.

  1. ExecuteCore được gọi bởi MvcHandler sau khi điều khiển bản thân được khởi tạo. Bởi thời điểm này MVC thậm chí không biết làm thế nào bộ điều khiển sẽ gọi hành động của nó. Bạn có thể ghi đè lên tiêu chuẩn ExecuteCore của Bộ điều khiển để tinh chỉnh quy trình thực thi tổng thể của nó là chút.

  2. OnActionExecuting hoàn toàn là câu chuyện khác nhau. Nó được gọi trong khi yêu cầu bộ lọc hành động theo số ControllerActionInvoker. Bằng cách đó điểm MVC đã biết rằng hành động tồn tại, gọi nó, lấy tất cả bộ lọc (thường được định nghĩa như thuộc tính) và thực hiện nó trong một thời điểm nhất định của tổng thể đường ống dẫn thực hiện (OnActionExecuting, OnActionExecuted, OnResultExecuting và vân vân).

Tùy thuộc vào chính xác bạn muốn đạt được điều gì khi quyết định sử dụng điểm mở rộng nào.

  • Override ExecuteCore trong nguồn gốc điều khiển để tinh chỉnh chung hành vi của nó (không thực sự thường là những trường hợp trong ứng dụng bình thường).
  • Sử dụng các bộ lọc để thực hiện một số nhiệm vụ bổ sung dường như trực giao với chính acion đó là được thực hiện (thường là một số logic tương tự AOP hoặc liên quan đến quản lý phiên/giao dịch cơ sở dữ liệu).
5

ExecuteCore được gọi ngay sau khi bộ điều khiển đã được khởi tạo trong khi OnActionExecuting xảy ra ở giai đoạn sau của đường dẫn thực hiện và được gọi ngay trước khi thao tác bộ điều khiển được gọi. Trong phương pháp thứ hai bạn có thể trực tiếp thao tác các ActionResult và ngắn mạch thực hiện các hành động bằng cách chuyển hướng ví dụ đối với một số hành động khác:

filterContext.Result = ... 
+2

Loại kịch bản nào phù hợp với từng phương pháp? Tôi đã xem một ví dụ về bản địa hóa, nó đã sử dụng ExecuteCore để nhận các cài đặt ngôn ngữ/văn hóa. Tôi đã sử dụng OnActionExecuting để thêm một số viewdata phổ biến mà tất cả các hành động sử dụng ... chỉ tò mò. Cảm ơn! – Chaddeus

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