我正在学习MVC 3并且我遇到了一件事。
我的模型中有两个表(图库和图像)。这些表格与GalleryId相关(一对多)(1个图库 - 许多图像)。
在画廊 - >详细信息视图我想插入图库详细信息(这很简单)还有一件事 - 来自此图库的图像列表。我不知道该怎么做。 以下是此模型中的类:
public partial class Gallery
{
public Gallery()
{
this.Images = new HashSet<Image>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public System.DateTime CreatedOn { get; set; }
public virtual ICollection<Image> Images { get; set; }
}
public partial class Image
{
public int Id { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
public int GalleryId { get; set; }
public System.DateTime UploadedOn { get; set; }
public virtual Gallery Gallery { get; set; }
}
public partial class MyEntities : DbContext
{
public DbSet<Gallery> Galleries { get; set; }
public DbSet<Image> Images { get; set; }
}
最好的方法是什么?
答案 0 :(得分:2)
在详情视图中,您使用图库作为模型(在控制器中返回所需的图库return ActionResult View(service.GetGallery(id));
在视图中你有一个循环:
@foreach (var item in Model.Images.Select((model, index) => new { index, model }))
{
<div>@(item.index). @item.model.Name </div>
}
答案 1 :(得分:1)
最简单的方法是在您传递给详细信息视图的模型中传递它。
public ActionResult Details(int id)
{
var item = //get gallery item from database
item.ImagesReference.Load();
return View(item);
}
在您看来,您可以执行以下操作:
<ul>
<%: if (Model.Images != null) foreach(var item in Model.Images) { %>
<li> <%: item.Name %> </li>
<% } %>
</ul>
您也可以通过ViewData传递一个列表,但我认为在模型中传递它是比较整洁的,因为它不需要设置任何其他变量,EF会在模型中为您执行此操作。
注意:我键入的某些名称可能已关闭,但Intellisense会为您提供正确的名称,因为EF已生成这些对象。我希望你理解我试图解释的基本想法: - )