我有三个项目/图书馆。
SiteService(WCF服务)
SiteModel(POCO对象)
SiteMVC(Web应用程序)
在我的SiteModel库中,我只有POCO对象。这些对象是由t4模板生成的,所以我不想改变任何东西。 SiteService使用这些POCO对象并将它们序列化(这就是使用POCO对象而不是EF设计器生成的类的原因)
在WebApplication中,我想对这些POCO对象使用验证。我希望尽可能保持模型库的清洁,不要在它们上使用DataAnnotations,因为不同的应用程序中的规则可能会有所不同。
ASP.NET MVC2中验证的最佳方法是什么?是否可以使用DataAnnotations(伙伴类)?
答案 0 :(得分: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的ViewModel,然后在您的模型(干净的POCO对象)和ViewModel之间进行映射。
答案 1 :(得分:0)
FYI。虽然部分班级有效。如果您正在使用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(); }
}
}