0

データベースから EF によって自動的に生成される EF エンティティ Respondent があります)。

ビュー内で使用するいくつかの検証ルールと属性を追加するには、このエンティティを展開する必要がありました。

[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 に答える