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

时间:2011-02-11 21:16:06

标签: c# asp.net asp.net-mvc entity-framework

我们将快速项目(CRUD表单)放在一起,并决定跳过视图模型并直接在控制器和视图中使用EF实体。由于我不熟悉这种方法,我对处理验证感到困惑。

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

3 个答案:

答案 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

干杯。