我们将快速项目(CRUD表单)放在一起,并决定跳过视图模型并直接在控制器和视图中使用EF实体。由于我不熟悉这种方法,我对处理验证感到困惑。
例如:DB字段的长度为25.如何在我的视图中将其转移(如果可以)到验证约束?如果我使用的是中间模型,我会将属性附加到模型属性,它会起作用。我如何直接使用EF对象?谢谢。
答案 0 :(得分:7)
这可以使用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;}
}
答案 1 :(得分:0)
最简单的方法是使用System.ComponentModel.DataAnnotations anmespace中的DataAnnotations属性。
MVC尊重这些并且如果有任何失败,将填充您的ModelError集合。对于您的示例,您可以为该命名空间添加using语句,然后使用
标记属性[StringLength(25)]
并称之为一天。
答案 2 :(得分:0)
您需要使用部分'buddy'元类并使用验证属性对其进行修饰。
例如,假设您的实体是'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上的此链接:
Customize Data Field Validation in the Model
干杯。