2012-03-26 3 views
0

.NETのStringLengthおよびRange属性を使用して、自分のクラスのさまざまなプロパティに制約を設定したいとします。私は次の非常に単純なコードを書いた:.NET RangeおよびStringLength属性をMVCアプリケーションの外部で使用できますか?

class AttributePlayground 
{ 
    [StringLength(5)] 
    public static String StringLengthTest { get; set; } 

    [Range(10, 20)] 
    public static int Age { get; set; } 
} 

static void Main(string[] args) 
{ 
    AttributePlayground.StringLengthTest = "Too long!"; 
    AttributePlayground.Age = 34;  
} 

私は、エラーが発生すると予想していたが、すべて正常に動作するはずです。

これらの属性については、Web上に表示されているすべての例は、MVCのコンテキストでそれらを示していますが、ドキュメントではそれを参照していません。

答えて

3

.NETの属性は、コンパイル時にアセンブリに焼き付けられる単なるメタデータです。それを解釈するものがなければ、何も起こりません。

ですから、例えばASP.NET MVCの場合、それらの属性を解釈バリデータはこのように、あります:

class AttributePlayground 
{ 
    [StringLength(5)] 
    public String StringLengthTest { get; set; } 

    [Range(10, 20)] 
    public int Age { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var attributePlayground = new AttributePlayground(); 
     attributePlayground.StringLengthTest = "Too long!"; 
     attributePlayground.Age = 34; 

     var context = new ValidationContext(attributePlayground, null, null); 
     var errors = new List<ValidationResult>(); 
     if (!Validator.TryValidateObject(attributePlayground, context, errors, true)) 
     { 
      foreach (var error in errors) 
      { 
       Console.WriteLine(error.ErrorMessage); 
      } 
     } 
    } 
} 

しかし、正直にあなたには、いくつかのより深刻かつ複雑な検証を行うつもりならば、私はあなたをお勧めしますデータ注釈である宣言的検証ロジックを使用していません。私はFluentValidation.NETをお勧めします。これにより、Data Annotationで達成するのが非常に困難だったはるかに複雑な検証ルールを素早く表現することができます。

+0

<<それらを解釈するものがなければ、まったく何も起こりません。 >>ああ、私は間違って、フレームワークは、この周りにいくつかの機能を内蔵していたと仮定した。今、私は分かる。 – Howiecamp

関連する問題