我正在努力扩展模型到控制器的“一对一”映射,以及大多数mvc(3)教程提供的视图。
我有一个人(操作员)和人物照片的模型。在数据库中,它们对应于Operator和OperatorPicture表。
public class Operator
{
public Operator()
{
this.OperatorPictures = new HashSet<OperatorPicture>();
}
[DisplayName("Operator ID")]
public int OperatorID { get; set; }
[Required]
[DisplayName("First name")]
[StringLength(20, ErrorMessage = "The first name must be 20 characters or less.")]
public string OperatorFirstName { get; set; }
[Required]
[DisplayName("Last name")]
[StringLength(20, ErrorMessage = "The last name must be 20 characters or less.")]
public string OperatorLastName { get; set; }
public virtual ICollection<OperatorPicture> OperatorPictures { get; set; } // Nav
}
public class OperatorPicture
{
[DisplayName("Operator Picture ID")]
public int OperatorPictureID { get; set; }
[DisplayName("Operator ID")]
public int OperatorID { get; set; }
[DisplayName("Picture")]
public byte[] Picture { get; set; } // 100x100
[DisplayName("Thumbnail")]
public byte[] Thumbnail { get; set; } // 25x25
public virtual Operator theoperator { get; set; } // FK
}
在大多数观点中,我会将它们展示在一起。如果存在,则运算符列表将包括缩略图。另一个屏幕可能会显示该人的详细信息以及全尺寸图片。
这是viewmodels发挥作用的地方吗?什么是适当的使用方式?
谢谢, 劳埃德
答案 0 :(得分:0)
绝对是使用它们的时间。 ViewModels只是一种打包视图或部分视图的所有不同位的方法。
我没有存储库模式,而是拥有存储库和服务。该服务有一个名为ViewModel的Get属性,可以从控制器中调用。 EG:
// initialise the service, then...
return View(service.ViewModel)
您可以在以下SO问题的接受答案中看到我的方法的更详细说明:
请注意,我在该代码中使用依赖注入。
它可能不是完全正统或规范的方法,但它会产生非常干净的控制器代码和易于使用的模式。