0

私は多くの同様の質問を見つけたことを認めますが、正確にはこれではありません:)
データ注釈属性を持つエンティティがあります:

  public class BaseEntity
  {
    [Required, DataType(DataType.DateTime)]
    public DateTime CreatedAt { get; set; }
    public string CreatedBy { get; set; }
  }
  public class ExchangeRights : BaseEntity
  {
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required, DataType(DataType.EmailAddress)]
    public string Email { get; set; }
  }

そして、空のオブジェクトを検証しようとします:

  ExchangeRights r = new ExchangeRights();
  ValidationContext vCtx = new ValidationContext(r);
  List<ValidationResult> res = new List<ValidationResult>();
  Validator.TryValidateObject(r, vCtx, res, true);

結果は1つのエラーのみです。電子メール フィールドが必須であること。ただし、電子メール形式がないことを示したり、CreatedAt フィールドが設定されていないことを示したりしないでください (null を許容しない値の型が原因である可能性があります)

まず、すべてのエラーが空であり、電子メール形式ではないことを示す必要があります。
しかし、より大きな問題は、メールを「asd」に設定すると、メソッドがエラーを返さないことです。
ただし、作成ページでこのエンティティを強く型付けされたビュー (Razor で MVC4 を使用) で使用すると、すべて正常に動作します。
フォームは、電子メールが必須であることを示しているか、有効な電子メール アドレス形式ではないことを示しています。また、CreatedAt フィールドが必須であることも示します ( Required 属性の有無にかかわらず!!) を設定すると、有効な日時形式ではないと表示されます。

ヘルプ/アイデア/直感をいただければ幸いです。

ありがとう、
ピーター

4

2 に答える 2

1

DataTypeAttribute 属性は、次の理由で使用できます: データ フィールドに追加の型情報を提供するため、カスタム フィールド テンプレートをデータ フィールドに関連付けるため。DataTypeAttribute は検証には使用されませんが、追加のメタデータ情報を提供するために使用できます。メールを検証するには、DataAnnotations Extensions EmailAttribute を使用するか、独自の検証属性を記述します。

詳細については、 http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.datatypeattribute.aspxを参照してください。

于 2013-04-05T13:03:43.003 に答える
1

電子メールの検証には、EmailAddress検証属性を使用する必要があります。[EmailAddress].

CreatedAt の場合、DateTime は null 非許容型であるため、ExchangeRights インスタンスを作成すると、CreatedAt プロパティに DateTime.MinValue が設定されます。したがって、プロパティには値があります。別の動作が必要な場合は、DateTime を使用しますか? 日時の代わりに。

お役に立てれば。

于 2013-04-05T12:53:47.573 に答える