2011-01-06 98 views
1

我有三个项目/库。ASP.NET MVC POCO类和验证

SiteService(WCF服务)
SiteModel(POCO对象)
SiteMVC(Web应用程序)

在我SiteModel库我只带了POCO对象。这些对象是由t4模板生成的,所以我不想改变任何东西。 SiteService使用这些POCO对象并对它们进行序列化(这就是使用POCO对象代替EF设计器生成的类的原因)

在WebApplication中,我想对这些POCO对象使用验证。我想保留我的模型库尽可能干净,并且不使用DataAnnotations,因为这些规则在不同的应用程序中可能会有所不同。

ASP.NET MVC2验证的最佳方式是什么?是否有可能使用DataAnnotations(好友类)?

回答

3

如果你的T4模板生成部分类,那么你很幸运。

您可以创建一个单独的部分定义,并与MetadataType装饰它:

// T4 Generated Code 
public partial class Item 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }   
} 

// Your partial in a separate file 
[MetadataType(typeof(ItemValidation))] 
public partial class Item 
{ 
} 

// Any DataAnnotations go here 
public partial class ItemValidation 
{ 
    [Required(ErrorMessage = "You need to have a Name!")] 
    public string Name { get; set; } 
} 

否则,你唯一的选择是在Web项目来创建DataAnnotations的ViewModels,然后你的模型之间的映射(清洁POCO对象)和你的ViewModels。

+0

+1:聪明(但我猜你错过了第二个`public partial class Item`声明)。 – rsenna 2011-01-06 20:55:30

0

仅供参考。部分课程有效。如果您使用RIA或WCF并希望该属性出现,则需要添加[DataMember]属性。

public partial class Employee 
{  
    [DataMember] 
    public string ComposedName 
    { 
     get 
     { 
      return String.Format("{0}, {1}", this.LastName, this.FirstName); 
     } 
     set 
     { throw new NotImplementedException(); } 
    } 
}