Quiero decir que mi solución fue como la respuesta proporcionada en esta página de stackoverflow: ASP.NET MVC 4, ¿varios modelos en una sola vista?
Sin embargo, en mi caso, la consulta linq que usaron en su controlador no funcionó para mí.
Esta es dicha consulta:
var viewModels =
(from e in db.Engineers
select new MyViewModel
{
Engineer = e,
Elements = e.Elements,
})
.ToList();
En consecuencia, "en su opinión, simplemente especifique que está utilizando una colección de modelos de vista" tampoco funcionó para mí.
Sin embargo, una ligera variación en esa solución funcionó para mí. Aquí está mi solución en caso de que esto ayude a alguien.
Aquí está mi modelo de vista en el que sé que solo tendré un equipo, pero ese equipo puede tener múltiples tableros (y tengo una carpeta ViewModels dentro de mi carpeta Modelos, por cierto, el espacio de nombres):
namespace TaskBoard.Models.ViewModels
{
public class TeamBoards
{
public Team Team { get; set; }
public List<Board> Boards { get; set; }
}
}
Ahora este es mi controlador. Esta es la diferencia más significativa de la solución en el enlace mencionado anteriormente. Construyo el ViewModel para enviarlo a la vista de manera diferente.
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);
}
Entonces, en mi opinión, no lo especifico como una lista. Simplemente hago "@model TaskBoard.Models.ViewModels.TeamBoards". Entonces solo necesito un para cada uno cuando itero sobre los tableros del equipo. Aquí está mi punto de vista:
@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>
Soy bastante nuevo en ASP.NET MVC, por lo que me tomó un tiempo resolver esto. Entonces, espero que esta publicación ayude a alguien a resolver su proyecto en un plazo más corto. :-)