asp.net mvc3将相关型号保持在一起?

时间:2011-09-29 14:44:01

标签: asp.net-mvc-3

我正在努力扩展模型到控制器的“一对一”映射,以及大多数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发挥作用的地方吗?什么是适当的使用方式?

谢谢, 劳埃德

1 个答案:

答案 0 :(得分:0)

绝对是使用它们的时间。 ViewModels只是一种打包视图或部分视图的所有不同位的方法。

我没有存储库模式,而是拥有存储库和服务。该服务有一个名为ViewModel的Get属性,可以从控制器中调用。 EG:

// initialise the service, then...
return View(service.ViewModel)

您可以在以下SO问题的接受答案中看到我的方法的更详细说明:

MVC Patterns

请注意,我在该代码中使用依赖注入。

它可能不是完全正统或规范的方法,但它会产生非常干净的控制器代码和易于使用的模式。