将validation附加到MVC控制器/视图中使用的EF对象?

我们正在组合一个快速项目(CRUD表单)并决定跳过视图模型并直接在控制器和视图中使用EF实体。 由于我不习惯这种方法,我对处理validation感到困惑。

例如:DB字段的长度为25.如何在我的视图中将其转移(如果可以)到validation约束? 如果我使用的是中间模型,我会将属性附加到模型属性,它会起作用。 我如何直接使用EF对象? 谢谢。

这可以使用Ef生成的类上的MetadataType属性来完成。 EF生成部分类。 所以这些可以扩展并添加属性。 然后可以编写另一个可以有成员装饰的“伙伴类”。 例如

[MetadataType(typeof(EFGeneratedClass_MetaData))] public partial class EFGeneratedClass { } public partial class EFGeneratedClass_MetaData { [Required] [Display(Name="Member1 Display")] public string Member1 {get; set;} } 

最简单的方法是使用System.ComponentModel.DataAnnotations anmespace中的DataAnnotations属性。

MVC尊重这些并且如果有任何失败,将填充您的ModelError集合。 对于您的示例,您可以为该命名空间添加using语句,然后使用标记属性

 [StringLength(25)] 

并称它为一天。

您需要使用部分“伙伴”元类并使用validation属性对其进行修饰。

例如,假设您的实体是’Foo’:

 [MetadataType(typeof(FooMetadata))] public partial class Foo {} public class FooMetadata { //apply validation attributes to properties [Required] [Range(0, 25)] [DisplayName("Some Neato Property")] public int SomeProperty { get; set; } } 

有关更多信息,请参阅MSDN上的此链接:

在模型中自定义数据字段validation

干杯。