2011-07-08 36 views
11

Giả sử bạn có danh sách Người A và danh sách Người B trong một trang. Và hai lớp này là các lớp riêng biệt trong L2S, đại diện cho hai bảng khác nhau. Do đó, bạn không thể chuyển một mô hình như sau:C# mô hình mvc so với viewbag

... 
@model PeopleA 
... 
@foreach(var peopleA in Model.People) ... 

@foreach(var peopleB in //what?) 

Theo đó, tôi đoán, tôi có ba tùy chọn để làm theo.

  • Thứ nhất là chia trang thành các chế độ xem một phần để tôi có thể chuyển mô hình qua trình trợ giúp RenderAction. Vì tôi sẽ chỉ sử dụng một phần lượt xem này một khi tùy chọn này dường như không thu hút tôi.
  • Tùy chọn thứ hai là sử dụng ViewBags mà tôi không muốn kể từ khi tôi thích các kiểu máy được nhập mạnh mẽ hơn.
  • Người cuối cùng, cuối cùng, mà tôi là về để sử dụng nhưng muốn hỏi trước khi làm như vậy, là để tạo ra một mô hình như sau:

ModelMyPage.cs

public List<PeopleA> peopleA { get; set; } 
public List<PeopleB> peopleB { get; set; } 

MyController. cs

... 
ModelMyPage m = new ModelMyPage(); 
m.peopleA = // query 
m.peopleB = // another query 
return(m); 

Và bạn có ý tưởng. Đây có phải là cách hợp lệ để hoàn thành nhiệm vụ của tôi hoặc có cách nào tốt hơn để làm những gì tôi muốn không?

Trả lời

17

Tạo ViewModel cụ thể cho trang, vì tùy chọn của bạn 3 là cách tôi sẽ thực hiện.

Tôi tin rằng đây cũng là phương pháp được đề xuất.

2

Tôi sẽ làm điều đó theo cách thứ ba. Ngoài ra, nếu bạn định hiển thị html giống hệt nhau cho mỗi người trong cả hai mảng, tôi sẽ concat chúng trước khi foreach:

var person in Model.PeopleA.Concat(Model.PeopleB) 
2

Tùy chọn đầu tiên và thứ ba của bạn có vẻ OK.

quảng cáo 1) "chỉ sử dụng chúng một lần" không phải là đối số tốt. Sử dụng một phần lượt xem để tổ chức chế độ xem.

quảng cáo 2) Sử dụng Viewbag để thêm các mục nhỏ như danh sách tra cứu.

quảng cáo 3) Chế độ xemMô hình (trở nên) phổ biến trong MVC. Đây có lẽ là cách tiếp cận tốt nhất.

8

Không, không có ý tưởng nào tốt hơn. Trong asp.net MVC, M là viết tắt của ViewModels, không phải là mô hình Business, Domain. Bạn nên tạo Chế độ xem cho chế độ xem của mình và không được khuyến nghị sử dụng Mô hình kinh doanh. Bạn nên thiết kế ViewModels của mình để phù hợp với nhu cầu tương tác của bộ điều khiển với Tên miền và từ bộ điều khiển để xem tương tác

2

Tôi thường tạo Mô hình cho trang và đặt tên là như vậy, ví dụ: AccountDetailsPageModel. Sau đó, các mô hình khác có thể là tính thích hợp của điều này cho các trang phức tạp.

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