关于管理模型的建议[ASP.NET MVC]

时间:2009-08-20 10:25:13

标签: asp.net-mvc

看起来好像ASP.NET MVC 2 Preview 1 was just released它意味着事情的完成方式在模型方面可能略有不同。允许对其模型中的属性进行验证的DataAnnotation功能很好,但我不确定在哪里放置它。

我按照Steve Sanderson's book on ASP.NET MVC中的建议手动创建我的模型,这完全适合我。但是,对于来自视图页面的POST数据,我应该有一个单独的模型吗?所以说我正在创建产品项目,我的主要模型可能如下所示:

public class Product {
    [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int ProductID { get; set; }
    [Column] public string ProductName { get; set; }
    [Column] public string ProductDescription { get; set; }
    [Column] public double ProductCost { get; set; }
}

现在斯科特的例子给了我们DataAnnotations所以你可以这样做:

public class Product {
    public int? ProductID { get; set; }

    [Required(ErrorMessage="Must enter a product name!")]
    public string ProductName { get; set; }

    public string ProductDescription { get; set; }

    [Range(1, 500, ErrorMessage="Too expensive!")]
    public double ProductCost { get; set; }
}

后一个示例将具有可为空的ProductID字段,因为它将是数据库中的自动增量字段。现在,这两个示例都将包含在类中,并且可能具有相同的名称。就个人而言,我不认为我的主要模型应该在其中包含这些注释,因为验证数据不应该是他们的责任。那么我应该有不同的名称空间,其中的类具有不同的角色吗?

2 个答案:

答案 0 :(得分:1)

在我看来,验证是模型关注的一部分 - 将它们放在一起。

答案 1 :(得分:1)

就个人而言,我有一个模型被发送到视图并发布到控制器,并且通常将它们命名为ProductEditModel。然后验证它并在控制器中转换为我的产品类型。

此视图模型通常包含在某种类型的表示模型中,用于视图中的所有数据,这些数据不会在页面的生命周期中发生变化,例如。菜单项,用户名等。

查看此预告http://serialseb.blogspot.com/2009/05/my-mvc-best-practices-talk.html它会更好地解释它并且是mvc dev的一个非常好的方法