Tôi muốn nói rằng giải pháp của tôi giống như câu trả lời được cung cấp trên trang stackoverflow này: ASP.NET MVC 4, nhiều mô hình trong một khung nhìn?
Tuy nhiên, trong trường hợp của tôi, truy vấn linq họ sử dụng trong Trình điều khiển của họ không hoạt động với tôi.
Đây là truy vấn nói:
var viewModels =
(from e in db.Engineers
select new MyViewModel
{
Engineer = e,
Elements = e.Elements,
})
.ToList();
Do đó, "trong chế độ xem của bạn chỉ xác định rằng bạn đang sử dụng bộ sưu tập mô hình chế độ xem" cũng không hoạt động với tôi.
Tuy nhiên, một biến thể nhỏ trên giải pháp đó đã làm việc cho tôi. Đây là giải pháp của tôi trong trường hợp này giúp bất cứ ai.
Đây là mô hình xem của tôi, trong đó tôi biết tôi sẽ chỉ có một nhóm nhưng nhóm đó có thể có nhiều bảng (và tôi có thư mục ViewModels trong thư mục Mô hình của mình btw, do đó không gian tên):
namespace TaskBoard.Models.ViewModels
{
public class TeamBoards
{
public Team Team { get; set; }
public List<Board> Boards { get; set; }
}
}
Bây giờ đây là bộ điều khiển của tôi. Đây là sự khác biệt đáng kể nhất từ giải pháp trong liên kết được tham chiếu ở trên. Tôi xây dựng ViewModel để gửi đến chế độ xem khác nhau.
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
TeamBoards teamBoards = new TeamBoards();
teamBoards.Boards = (from b in db.Boards
where b.TeamId == id
select b).ToList();
teamBoards.Team = (from t in db.Teams
where t.TeamId == id
select t).FirstOrDefault();
if (teamBoards == null)
{
return HttpNotFound();
}
return View(teamBoards);
}
Sau đó, theo quan điểm của tôi, tôi không chỉ định nó là một danh sách. Tôi chỉ làm "@model TaskBoard.Models.ViewModels.TeamBoards" Sau đó, tôi chỉ cần một cái cho mỗi khi tôi lặp qua các bảng của Đội. Đây là quan điểm của tôi:
@model TaskBoard.Models.ViewModels.TeamBoards
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>Team</h4>
<hr />
@Html.ActionLink("Create New Board", "Create", "Board", new { TeamId = @Model.Team.TeamId}, null)
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => Model.Team.Name)
</dt>
<dd>
@Html.DisplayFor(model => Model.Team.Name)
<ul>
@foreach(var board in Model.Boards)
{
<li>@Html.DisplayFor(model => board.BoardName)</li>
}
</ul>
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.Team.TeamId }) |
@Html.ActionLink("Back to List", "Index")
</p>
Tôi còn khá mới với ASP.NET MVC vì vậy tôi phải mất một chút thời gian để tìm ra điều này. Vì vậy, tôi hy vọng bài đăng này sẽ giúp ai đó tìm ra dự án của họ trong một khung thời gian ngắn hơn. :-)