Tôi có một trang web MVC3 sử dụng Razor làm công cụ xem của nó. Tôi muốn trang web của mình có thể lột được. Hầu hết các giao diện có thể có đủ tương tự để chúng có thể lấy từ một bố cục chính được chia sẻ.
Do đó, tôi đang xem xét thiết kế này:
Tuy nhiên, tôi muốn có thể gọi RenderSection
ở lớp dưới cùng _Common.cshtml
và để nó hiển thị một phần được xác định ở lớp trên cùng Detail.cshtml
,. Điều này không hoạt động: RenderSection
dường như chỉ hiển thị các phần được xác định ở lớp tiếp theo.
Tất nhiên, tôi có thể xác định từng phần trong mỗi skin. Ví dụ: nếu _Common
cần gọi RenderSection("hd")
một phần được xác định trong Detail
, tôi chỉ cần đặt phần này vào mỗi phần _Skin
và nó hoạt động:
@section hd {
@RenderSection("hd")
}
Điều này dẫn đến một số mã trùng lặp (vì mỗi skin bây giờ phải có cùng một phần này) và thường cảm thấy lộn xộn. Tôi vẫn còn mới với Razor, và có vẻ như tôi có thể thiếu một cái gì đó rõ ràng.
Khi gỡ lỗi, tôi có thể thấy danh sách đầy đủ các phần được xác định trong WebViewPage.SectionWritersStack. Nếu tôi có thể yêu cầu RenderSection xem qua toàn bộ danh sách trước khi từ bỏ, nó sẽ tìm thấy phần tôi cần. Than ôi, SectionWritersStack là không công khai.
Ngoài ra, nếu tôi có thể truy cập hệ thống phân cấp của các trang bố cục và cố gắng thực thi RenderSection trong từng ngữ cảnh khác nhau, tôi có thể tìm thấy phần tôi cần. Tôi có lẽ đang thiếu một cái gì đó, nhưng tôi không thấy bất kỳ cách nào để làm điều này.
Có cách nào để thực hiện mục tiêu này, ngoài phương pháp tôi đã vạch ra không?