2013-05-01 47 views
5

Tôi cần gửi dữ liệu dưới dạng danh sách cho hai mô hình khác nhau trong cơ sở dữ liệu của tôi đến chế độ xem trong dự án MVC4.MVC4 ViewBag hoặc ViewModel hoặc?

Something như thế này:

khiển:

public ActionResult Index() 
{ 
    Entities db = new Entities(); 

    ViewData["Cats"] = db.Cats.toList(); 
    ViewData["Dogs"] = db.Dogs.toList(); 

    return View(); 
} 

Xem:

@* LIST ONE *@ 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColOne) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColTwo) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColThree) 
     </th> 
    </tr> 

@foreach (var item in @ViewData["Cats"]) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColOne) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColTwo) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColThree) 
     </td> 
    </tr> 


@* LIST TWO *@ 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColOne) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColTwo) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColThree) 
     </th> 
    </tr> 

@foreach (var item in @ViewData["Dogs"]) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColOne) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColTwo) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColThree) 
     </td> 
    </tr> 

The View là để hiển thị, một danh sách hai danh sách của cho mỗi mô hình.

Tôi không chắc chắn về cách thức hiệu quả nhất để thực hiện việc này là gì?

ViewModel?

Chế độ xem/Viewbag?

Cái gì khác?

(gợi ý hãy không có bên thứ ba)

CẬP NHẬT:

Hơn nữa tôi đã cố gắng trong hơn một giờ tại để thực hiện các câu trả lời gợi ý một ViewModel List<T> mà không cần bất kỳ may mắn. Tôi tin rằng điều này là do thực tế là ViewModel của tôi trông như thế này:

public class GalleryViewModel 
{ 
    public Cat cat { get; set; } 
    public Dog dog { get; set; } 
} 

Trả lời

7

Cố gắng giải thích vấn đề của bạn và mục tiêu của bạn, vì vậy chúng tôi biết (đặc biệt) những gì bạn đang cố gắng để làm.

Tôi thực hiện việc này để có nghĩa là bạn có hai danh sách và bạn muốn gửi chúng đến chế độ xem. Một cách để làm điều này là đặt hai danh sách vào một mô hình và gửi mô hình đến khung nhìn, nhưng dường như bạn đã xác định rằng bạn đã có hai mô hình, vì vậy tôi sẽ đi với giả định đó.

khiển

public ActionResult Index() 
{ 
    ModelA myModelA = new ModelA(); 
    ModelB myModelB = new ModelB(); 

    IndexViewModel viewModel = new IndexViewModel(); 

    viewModel.myModelA = myModelA; 
    viewModel.myModelB = myModelB; 

    return View(viewModel); 
} 

Xem Mẫu

public class IndexViewModel 
{ 
    public ModelA myModelA { get; set; } 
    public ModelB myModelB { get; set; } 
} 

Mẫu

public class ModelA 
{ 
    public List<String> ListA { get; set; } 
} 

public class ModelB 
{ 
    public List<String> ListB { get; set; } 
} 

Xem

@model IndexViewModel 

@foreach (String item in model.myModelA) 
{ 
    @item.ToString() 
} 

(Xin lỗi nếu tôi C# là gỉ)

+0

Cảm ơn @row Tôi đã cố gắng để có được điều này để làm việc nhưng tôi dường như không thể hình dung nó ra. Rõ ràng vấn đề là ViewModel của tôi không bao gồm 'Danh sách ' thay vì loại mô hình thực tế, ví dụ: 'danh sách công khaiA listA {get; bộ; } '. Tôi sẽ cập nhật bài viết đầu tiên của tôi để phản ánh điều này. –

+0

Mất một lúc nhưng tôi đã hiểu! Cảm ơn Rowan. –