2012-07-16 32 views
8

Tôi có hai lớp mô hình, mỗi lớp là một bảng trong cơ sở dữ liệu. Một mô hình được gọi là 'Quần áo' và 'Giày' khác.Gửi nhiều mô hình để xem MVC 4

Tôi muốn hiển thị nội dung của mỗi bảng trong cùng một chế độ xem dao cạo, nhưng MVC chỉ cho phép tôi gửi một mô hình đến chế độ xem.

@model IEnumerable<Test.Models.Clothes> 

Có cách nào để gửi nhiều mô hình đến chế độ xem dao cạo không?

Nếu không, cách thông thường để hiển thị nội dung của một mô hình khác trong chế độ xem đã có một mô hình khác được truyền cho nó. Cảm ơn về lời khuyên.

Trả lời

11

Tạo lớp mô hình chế độ xem có cả lớp làm đối tượng của nó. Nó sẽ sau đó gõ an toàn.

public class ViewModelForDisplay 
{ 
     public Clothes Clothes {get; set;} 
     public Shoes Shoes {get; set;} 
} 

//on Controller 
Clothes objClothes = GetClothes(); 
Shoes objShoes = GetShoes(); 

ViewModelForDisplay objViewModel = new ViewModelForDisplay() {Clothes = objClothes, Shoes= objShoes } 

Cách dễ dàng khác để thực hiện việc này bằng cách sử dụng ViewBag.It sử dụng tính năng động được thêm vào C# 4. Nó cho phép một đối tượng tự động thêm thuộc tính vào nó. Loại an toàn cũng là An toàn

ViewBag.Shoes= objShoes ; 
ViewBag.Clothes= objClothes ; 

Bạn cũng có thể sử dụng ViewData để chuyển đối tượng vào html. Điều này sẽ không được an toàn. Nó đòi hỏi phải casting

ViewData["Clothes "] = objClothes ; 
ViewData["Shoes "] = objShoes ; 
+3

Xem mẫu là phương pháp ưa thích. – RickAndMSFT

+1

Hơn nữa, không nên chuyển mô hình của bạn (đối tượng cơ sở dữ liệu) cho khung nhìn. Tạo ViewModel chỉ với các trường bắt buộc –

+0

Cảm ơn bạn đã phát lại và đưa ra mẫu mã, có cơ hội mở rộng trên bộ điều khiển không? Nó không hiệu quả với tôi. – user1448260

1

Làm cho lớp của riêng bạn aka Xem mô hình và có nó bao gồm cả hai mô hình.

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