2009-09-08 32 views
5

Bộ điều khiển ASP.Net MVC có một số phương pháp điều khiển chuyển tiếp đến một bộ điều khiển hoặc hành động khác. Tuy nhiên, tất cả chúng đều gây ra chuyển hướng ứng dụng khách, với 302 và yêu cầu trình duyệt mới.Tại sao không có chuyển hướng Bộ điều khiển nội bộ trong ASP.Net MVC (hoặc CodeIgniter)?

Tại sao không có chức năng "gọi hành động của bộ điều khiển khác" bên trong, mà không yêu cầu khách hàng tham gia? Tôi khá chắc chắn rằng khuôn khổ CodeIgniter php cũng thiếu chức năng này.

Lý do tốt nhất mà tôi có thể đưa ra là cuối cùng là không cần thiết, vì bất kỳ mã nào bạn muốn gọi có thể được tính vào một nơi nào đó phổ biến, và trong ASP.Net MVC ít nhất, hoạt động có thể khá tốn kém . Nhưng a lot of people ask about this, và nó có vẻ như nó cuối cùng sẽ là một tiện lợi.

Vì vậy, rất nhiều người thông minh đã thiết kế các khung công tác này. Phải có một số lý do chính đáng để không có điều này?

Trả lời

4

Trong Codeigniter, bạn có thể đặt các tuyến tùy chỉnh và các công cụ để hướng các URL nhất định đến các bộ điều khiển/hành động khác, nhưng tôi nghĩ bạn có nghĩa là ở giữa chức năng điều khiển để chuyển sang chức năng khác?

Nếu có bất kỳ logic nghiệp vụ nào bạn có, đặc biệt nếu nó sẽ được sử dụng lại, nó sẽ đi vào một mô hình, không phải là một bộ điều khiển. Bạn cũng có thể chỉ định các chế độ xem khác nhau trong bộ điều khiển tùy thuộc vào một số điều kiện hoặc điều gì đó. Nếu bạn đã lặp lại mã không 'phù hợp' thành một mô hình, thì nó có lẽ sẽ kết thúc như một hàm trợ giúp tĩnh, hoặc trong một lớp thư viện.

Vì vậy, yeah, tôi nghĩ rằng bạn đang phải vào khi bạn nói:

Lý do tốt nhất mà tôi có thể đưa ra là cuối cùng nó là không cần thiết, vì bất kỳ mã bạn muốn gọi vào có thể là yếu tố vào một nơi nào đó phổ biến

Điều này buộc bạn phải nằm trong mẫu MVC.

Tốt nhất để giữ cho bộ điều khiển của bạn có trọng lượng nhẹ.

2

Tôi nghi ngờ nó có thể đi ngược lại ý tưởng REST, mọi thứ đều là tài nguyên. Nếu bạn muốn thực hiện chuyển máy chủ, bạn cũng có thể cung cấp thêm url cho tài nguyên đó. Bằng cách này, khách hàng sẽ biết về url cụ thể đó, anh ta sẽ nhận được một đại diện cụ thể của một tài nguyên, và không phải trong hoàn cảnh nào đó khác. Điều đó có ý nghĩa thực sự.

+0

Tôi cũng nghĩ về điều này. Bạn rõ ràng sẽ được tiêu thụ nhiều nguồn lực (như được định nghĩa bởi định tuyến của bạn) bằng cách làm một chuyển hướng nội bộ, mà là khá unRESTful. Tôi không chắc đây có phải là lý do đủ tốt để loại trừ chức năng này, nhưng nó đã ở trên cao trong quá trình suy nghĩ của tôi. – womp

4

Vâng, ít nhất trong ASP.NET MVC, các hành động điều khiển chỉ là các phương thức C# được gọi theo cách sáng tạo. Vì vậy bạn chỉ có thể gọi một cách rõ ràng một hành động điều khiển, như vậy:

điều khiển mẫu:

public class SampleController : Controller 
{ 
    public ActionResult Foo() 
    { 
     return View("foo"); 
    } 

    public ActionResult ShowMeFoo() 
    { 
     return Foo(); 
    } 
} 

Bây giờ, tôi nghĩ rằng trong nhiều trường hợp người ta sẽ không muốn làm điều này. Xem xét url là giao diện RPC cho ứng dụng của bạn, nó sẽ chuyển tiếp đến một url khác khi nhận được các kết quả khác nhau. Không áp dụng cho tất cả các trường hợp, nhưng có thể ứng dụng nhiều nhất.

+0

Rất đúng. Tôi đoán tôi quan tâm nhiều hơn đến việc chuyển sang Bộ điều khiển khác bằng cách sử dụng các phương pháp Chuyển hướng, như RedirectToAction(), nhưng đây là cách tốt để tránh chuyển hướng nếu bạn đang sử dụng cùng một bộ điều khiển. – womp

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