Я хочу сказать, что мое решение было похоже на ответ, приведенный на этой странице: ASP.NET MVC 4, несколько моделей в одном представлении?
Однако в моем случае запрос linq, который они использовали в своем контроллере, у меня не работал.
Это такой запрос:
var viewModels =
(from e in db.Engineers
select new MyViewModel
{
Engineer = e,
Elements = e.Elements,
})
.ToList();
Следовательно, «по вашему мнению, просто укажите, что вы используете коллекцию моделей представлений», у меня тоже не получилось.
Однако, небольшое изменение этого решения сработало для меня. Вот мое решение на случай, если это кому-нибудь поможет.
Вот моя модель представления, в которой я знаю, что у меня будет только одна команда, но у этой команды может быть несколько досок (и у меня есть папка ViewModels в моей папке Models, кстати, отсюда и пространство имен):
namespace TaskBoard.Models.ViewModels
{
public class TeamBoards
{
public Team Team { get; set; }
public List<Board> Boards { get; set; }
}
}
Теперь это мой контроллер. Это самое существенное отличие от решения по ссылке, указанной выше. Я строю ViewModel для отправки в представление по-другому.
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);
}
Тогда, на мой взгляд, я не указываю это как список. Я просто делаю "@model TaskBoard.Models.ViewModels.TeamBoards" Тогда мне нужно только для каждого, когда я перебираю доски Команды. Вот мой взгляд:
@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>
Я довольно новичок в ASP.NET MVC, поэтому мне потребовалось немного времени, чтобы понять это. Итак, я надеюсь, что этот пост поможет кому-то сориентироваться в своем проекте в более короткие сроки. : -)