2011-01-06 100 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(); } 
    } 
}