2016-07-01 17 views
0

私は少し問題を抱えているが、ここに私のコードは次のとおりです。日時(18年)

public partial class Tourist 
    { 

     public Tourist() 
     { 
      Reserve = new HashSet<Reserve>(); 
     } 
     public int touristID { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string touristNAME { get; set; } 

     public DateTime touristBIRTHDAY { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string touristEMAIL { get; set; } 

     public int touristPHONE { get; set; } 

     public virtual ICollection<Reserve> Reserve { get; set; } 
    } 
} 

どのように私は18歳であることをtouristBIRTHDAYを制限することができますか?私はこの機能を使わなければならないと思いますが、どこに置くべきか分かりません: 注:この機能はその例です。

DateTime bday = DateTime.Parse(dob_main.Text); 
DateTime today = DateTime.Today; 
int age = today.Year - bday.Year; 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 

感謝;)

UPDATE: 私はBerkay Yaylaciの溶液に従いますが、私はとNullReferenceExceptionを取得しています。私の値のパラメータはデフォルトであるようですが、私のメソッドは投稿していません、なぜですか?それに対する解決策は何ですか?

答えて

4

独自の検証を書くことができます。まず、クラスを作成します。

私はIsValidのポスト後に実行され、制限をご確認ください。MinAge.cs

public class MinAge : ValidationAttribute 
    { 
     private int _Limit; 
     public MinAge(int Limit) { // The constructor which we use in modal. 
      this._Limit = Limit; 
     } 
     protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
     { 
       DateTime bday = DateTime.Parse(value.ToString()); 
       DateTime today = DateTime.Today; 
       int age = today.Year - bday.Year; 
       if (bday > today.AddYears(-age)) 
       { 
        age--; 
       } 
       if (age < _Limit) 
       { 
        var result = new ValidationResult("Sorry you are not old enough"); 
        return result; 
       } 


      return null; 

     } 
    } 

SampleModal.cs

[MinAge(18)] // 18 is the parameter of constructor. 
public DateTime UserBirthDate { get; set; } 

と呼ばれます年齢が制限を超えていない場合は(私たちはモーダルに与えた!)よりも返すValidationResult

ホープ助け、

+0

ありがとう!私はあなたの言うことをしましたが、何かがうまく機能していません。たとえば、私はTourist 1を作成しました。誕生日は10-05-1990で、とてもうまくいきます。その後、誕生日が12-22-1994のTourist 2を作成しようとすると、うまくいくはずですが、代わりに「NullReferenceExceptionがユーザーコードによって処理されませんでした」という結果になります。どうして? 注:NullReferenceExceptionが "DateTime bday = DateTime.Parse(value.ToString());"にポップアップします。 " – ElHashashin

+0

@ElHashashin形式が間違っていると思います。最初のフォーマットを確認しましたか? 10月22日か12月12日ですか? – Berkay

+0

形式はMM-DD-YYYYなので、12月22日です – ElHashashin

1

観光客クラスにIValidatableObjectを実装します。

ロジックをValidate()メソッドに入れます。

MVBoxを使用しているため、MessageBox.Show()はありません。 MVCモデルのバインダーは自動的にあなたにバリデーションルーチンを呼び出します。

は、ここで詳細

またあなたの年齢ロジックが間違っているHow do I use IValidatableObject?を持つ別のSO質問です。それは必要があります

DateTime now = DateTime.Today; 
int age = now.Year - bday.Year; 
if (now < bday.AddYears(age)) age--; 
関連する問題