2009-12-13 24 views
6

Tôi thích sử dụng phương thức mở rộng RenderAction trên đối tượng HtmlHelper để hiển thị thanh bên và tương tự trong các trang vì nó cho phép tôi giữ mã truy cập dữ liệu cho từng phần như vậy trong các phương pháp riêng biệt trên bộ điều khiển. Sử dụng một cơ sở điều khiển trừu tượng, tôi có thể xác định một mặc định "Chiến lược sidebar", sau đó có thể được tinh chế bằng cách ghi đè phương pháp này trong một bộ điều khiển bê tông, khi cần thiết.Giống như Html.RenderAction() nhưng không cần phục hồi đối tượng điều khiển

Chỉ có "vấn đề" tôi có với phương pháp này, là RenderAction được xây dựng theo cách nó luôn tạo một thể hiện tin tức của lớp bộ điều khiển, ngay cả khi hiển thị các hành động từ bộ điều khiển đã hoạt động. Một số bộ điều khiển của tôi hiện một số tra cứu dữ liệu trong phương pháp Initialize của họ, và sử dụng phương pháp RenderAction trong giao diện gây ra điều này xảy ra nhiều lần trong cùng một yêu cầu.

Có một số thay thế cho RenderAction sẽ sử dụng lại đối tượng bộ điều khiển nếu phương thức hành động được gọi là trên cùng một lớp bộ điều khiển với tư cách là "cha mẹ" không?

+0

Tại sao điều này là một vấn đề đối với bạn? Bạn không làm tối ưu hóa sớm? – queen3

+0

@ queen3: Có thể, nhưng đó không phải là câu hỏi :) –

Trả lời

1

Bạn có thể gọi đây. [ActionName] trong điều khiển của bạn.

ví dụ: this.Index() trong phương thức Hành động giới thiệu của bộ điều khiển nhà sẽ làm cho chế độ xem Chỉ mục thành b e được hiển thị mà không phải trải qua quá trình khởi tạo bộ điều khiển một lần nữa. Điều này sẽ chỉ làm việc cho một trang mặc dù toàn bộ.

Một renderPartial sẽ làm việc cho bạn, nhưng bạn sẽ phải chắc chắn rằng các "yếu tố" (sidebars vv) có tất cả các dữ liệu mà họ cần trong mô hình quan điểm của cha mẹ.

ví dụ renderPartial ("sidebars", ViewData.Model). Nếu ViewModel của bạn chứa tất cả mọi thứ bạn cần cho partials, chúng có thể được thêm vào đầu xem chia sẻ và bộ điều khiển của bạn chỉ cần thiết lập ViewMoel ban đầu.

Kindness,

Dan

+0

Với 'RenderPartial()' chế độ xem hiển thị rõ ràng chế độ xem một phần nào bao gồm trong thanh bên của tôi và bộ điều khiển phải cung cấp dữ liệu cho phần trả trước này. Với 'RenderAction()', bộ điều khiển sẽ quyết định điều gì đang đi vào thanh bên, và bất kỳ truy cập dữ liệu nào cần thiết cho thanh bên có thể được hoãn lại cho đến khi quyết định này được thực hiện. Cả hai phương pháp có trường hợp sử dụng, nhưng đối với những gì tôi đang cố gắng để làm, tôi tin rằng 'RenderAction() 'là phù hợp nhất. –

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