Tôi đã gặp sự cố với vấn đề sau trong Rails và ASP.Net MVC. Thông thường, có nhiều tiện ích chức năng trên một trang, nhưng một hành động điều khiển được cho là hiển thị trang. Hãy để tôi minh họa:Giải pháp thanh lịch cho lượt xem không liên quan trong khung công tác web MVC là gì?
Giả sử tôi có trang web thương mại điện tử bình thường và menu được tạo thành từ các danh mục, trong khi trang hiển thị một nhóm sản phẩm.
Đối với các sản phẩm, chúng ta hãy nói rằng tôi có một hành động trên một bộ điều khiển trông giống như sau:
def product_list
@products = Products.find_by_category(:name => 'lawnmowers')
end
Và tôi có một bố cục với cái gì đó như
<div id="menu"><%= render :partial => 'menu' %></div>
<div id="content"><%= yield %></div>
Các sản phẩm có một cái nhìn. ..
<%= render :partial => 'product', :collection => @products %>
(lưu ý tôi đã Bỏ qua phần quan điểm sản phẩm như irre levant)
Và menu có phần ...
<% Category.each {|c| %>
<%= render :partial => 'menu_node', :locals => { :category => c } %>
<% } %>
Dòng Tôi có một vấn đề với là "Category.each.do" trong giao diện. Tôi đang tìm nạp dữ liệu trong chế độ xem, thay vì sử dụng các biến đã được đặt và bị ràng buộc trong bộ điều khiển. Và nó có thể dễ dàng là một cuộc gọi phương thức phức tạp hơn để tạo ra menu.
Các giải pháp tôi đã xem xét là:
-A xem mô hình lớp cơ sở đó biết làm thế nào để thu được các mảnh dữ liệu khác nhau. Nhưng bạn có thể kết thúc với một trong những điều này cho mỗi "phần" khái niệm của trang web.
biến địa phương -a mà populates ở phía trên cùng của mỗi phương pháp (vi phạm DRY) -the điều tương tự, nhưng trong một cuộc gọi before_filter
Không ai trong số những vẻ rất thanh lịch với tôi. Tôi không thể không nhìn vào vấn đề này và nghĩ rằng một người trình bày MVP cho mỗi lần xem (không phải màn hình) là một giải pháp thanh lịch hơn.
ASP.Net MVC có hành động hiển thị (khác với đường dẫn render: action), không giải quyết vấn đề này, nhưng tôi không chắc mình nghĩ gì về giải pháp đó.
Suy nghĩ? Đề xuất giải pháp?
Added Lưu ý: Những câu trả lời cung cấp cho đến nay là những gợi ý tốt. Và chúng áp dụng cho ví dụ mà tôi đưa ra, trong đó trình đơn có thể xuất hiện trong mọi bố cục và rõ ràng là thứ yếu đối với dữ liệu sản phẩm.
Tuy nhiên, điều gì xảy ra nếu rõ ràng không có công dân hạng hai? Các trang web loại cổng thông tin thường có nhiều tiện ích không liên quan, trong đó mỗi tiện ích quan trọng.
Ví dụ: Điều gì xảy ra nếu trang này đang hiển thị xu hướng thời tiết, với các tiện ích cho nhiệt độ, độ ẩm và lượng mưa (và mỗi loại là kiểu và kiểu xem khác nhau).
câu hỏi hay. Tôi đã đấu tranh với điều này là tốt, như ứng dụng của tôi có tiềm năng cho nhiều 'vật dụng'. Tôi nghĩ rằng mỗi widget nên có Controller riêng của nó mà biết làm thế nào để gửi nó đó là dữ liệu, nhưng chỉ không chắc chắn làm thế nào nó sẽ được thực hiện trong ASP.NET MVC. –
Tôi có xu hướng sử dụng RenderAction trong các trường hợp này, nhưng như bạn đã nói, nó hoàn hảo. – DanP
DanP, bạn đang đề cập đến đường ray hoặc mvc asp.net? –