2009-08-14 12 views
5

Tôi có Chế độ xem mạnh được nhập vào một Hạng mục. Trong bộ điều khiển của tôi, tôi cần phải gửi hai Danh sách khác nhau. Có cách nào dễ dàng hơn để làm điều này ngoài việc tạo một lớp mới với hai Danh sách.Asp.Net MVC - Xem mạnh mẽ với hai danh sách cùng loại

Điều cuối cùng tôi đang cố gắng thực hiện là có trên trang chủ của tôi 10 mục được sắp xếp theo Ngày và 10 mục được sắp xếp theo Mức độ phổ biến.

gì tôi đã làm

Tôi thực sự đã đi với một sự kết hợp của hai câu trả lời. Tôi đã đánh mạnh Chế độ xem của mình vào lớp mới mà tôi đã tạo với hai danh sách. Sau đó, tôi đánh mạnh hai chế độ xem một phần vào từng danh sách. Có thể có vẻ như quá mức, nhưng tôi thích cách nó bật ra.

Trả lời

10

"tạo một lớp mới với hai Danh sách" là cách để thực hiện. Nó được gọi là một mô hình xem và một khi bạn nắm lấy nó, sức mạnh của các kiểu xem mạnh mẽ thực sự mở ra. Nó có thể đơn giản này:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

Đó là những gì John đề nghị hoặc không có một cái nhìn mạnh mẽ gõ và thêm chúng vào ViewData:

xem
ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

tùy chọn khác sẽ được mạnh mẽ gõ từng phần.

1

Bạn nên tạo mô hình bao gồm cả hai danh sách dành riêng cho chế độ xem.

Thông thường trong MVC nhỏ tôi đã thực hiện, tôi đã tạo mô hình cho mỗi chế độ xem ngay cả khi chúng chỉ truyền dữ liệu giống hệt được phân phát bởi dữ liệu hoặc lớp doanh nghiệp để giữ sự tách biệt giữa hai phần rất nghiêm ngặt . Thiết lập này là một công việc nhiều hơn một chút và không cần thiết trong nhiều trường hợp đơn giản nhưng nó giữ những điều sạch hơn trong quan điểm của tôi.

4

Có hai triết lý chung về điều này. Đầu tiên là tiếp cận John Sheehan. Bạn tạo mô hình chế độ xem tùy chỉnh với cả hai danh sách và chuyển cho chế độ xem được nhập mạnh mẽ của bạn.

Cách thứ hai là xem xét danh sách dưới dạng dữ liệu "phụ trợ" và đặt chúng trong ViewData như jeef3 đã nêu. Tuy nhiên, khi bạn hiển thị danh sách, bạn sử dụng một phần được nhập mạnh mẽ.

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Theo ý tôi, bạn gọi hàm RenderPartial (...) nhưng chuyển vào khóa dữ liệu chế độ xem bạn đã sử dụng.

Và một phần của bạn sẽ trông như thế:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

này mang đến cho bạn mạnh mẽ gõ quyền truy cập vào dữ liệu quan điểm từ bên trong một phần của bạn.