0

我有一个 EF 实体 Respondent,它是由 EF 从数据库中自动生成的)。

我必须扩展此实体以添加一些验证规则和属性以在我的视图中使用:

[MetadataType(typeof(RespondentMetadata))]
public partial class Respondent { }

public class RespondentMetadata
{
    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
}

现在,在我的控制器中,我需要检查这个 Respondent 对象在 FirstName 中是否确实具有值(无需明确检查该值,因为我可能有大量具有各种验证规则的此类属性)。

此检查可以在 [HttpPost] 操作中不需要的任何地方进行(因此,此处为 ModelState.IsValid N/A)。

如何在代码中的任何位置验证整个实体?

谢谢。

4

2 回答 2

2

“Text-Book-Way”是为您的模型添加验证。

然后你可以做一个检查

if (Respondent.IsValid())
{
}
于 2013-01-29T17:52:29.923 回答
2

您可以使用该Validator.ValidateObject方法在代码中的任何位置执行验证,但为此您需要停止使用MetadataTypeAttribute并使用该方法显式关联元数据类TypeDescriptor.AddProviderTransparent

样本:

var respondent = new Respondent();

var provider = new AssociatedMetadataTypeTypeDescriptionProvider(
    typeof (Respondent), 
    typeof (RespondentMetadata));

TypeDescriptor.AddProviderTransparent(provider, typeof (Respondent));

Validator.ValidateObject(
    respondent, 
    new ValidationContext(respondent, null, null));

该类Validator似乎不尊重该属性,因此这是我知道的唯一解决方法。

于 2013-01-29T18:00:18.277 回答