4

現在、私はモデルのDateTimeプロパティを持っています。私はtelerik MVCフレームワークを使用していますが、DateTimeプロパティを使用しています。このプロパティのエディタカラムは自動生成されるため、ViewまたはControllerでコントロールするコードはありません。 Telerikのウェブサイトには、日付時刻選択ツールのデフォルトの日付時刻を設定する方法が記載されていますが、このピッカーは列内にあるためどこからでも開始されません。問題は、DateTimeがまだ指定されていない場合は現在の日付と時刻に設定することです。現在、モデルのコードは次のようになります。モデルプロパティで「取得」と「設定」を変更するにはどうすればよいですか?

public DateTime CreatedDate { get; set;} 

私はそれがよりこのような何かをしたい:それは場合は、この質問のために保存されたDateTimeを返します

public DateTime CreatedDate 
     { 
      get 
      { 
       if (QuestionID != 0) 
       { 
        return this.CreatedDate; 
       } 
       else 
       { 
        return DateTime.Now; 
       } 

      } 
      set { CreatedDate = value; } 
     } 

このようIDが存在します。新しい質問を作成する場合は、現在のDateTimeを取得します。

問題はここにあります。画面をロードしようとすると、getはスタックオーバーフローを設定します。私はこの種のコードには本当に不満なので、どうやって作業するのか分かりません。

私たちがモデルで作業していないうちに、代わりにJQueryを使用してCreatedDateのデータを取得し、現在の日付時刻に設定しました。その問題は、日付時刻の「ピッカー」部分に移動したときに、現在の時刻ではなくデフォルトの日付時刻になります。これがJqueryではなくModel、View、Controllerを通じて設定する理由です。

私がモデルのゲットとセットを理解できるように助けてくれたら教えてください!

答えて

4

舞台裏で使用しているプラ​​イベートプロパティが必要です。あなたは現在、このような何かをやっているので、あなたがオーバーフローを取得している

private DateTime _createdDate; 
    public DateTime CreatedDate 
    { 
     get 
     { 
      if (QuestionID != 0) 
      { 
       return _createdDate; 
      } 
      else 
      { 
       return DateTime.Now; 
      } 

     } 
     set { _createdDate = value; } 
    } 

CreatedDate = 1/1/2012; 
...which then calls 
CreatedDate = 1/1/2012; 
...which then calls 
CreatedDate = 1/1/2012 
..You get the point (it is continuously setting itself until the stack overflows) 

オートは、実際に舞台裏でプライベート変数を使用するプロパティ({get;set;})を実装しました。 ILを見ると、生成されたプライベート変数に基づいて、単純に{get;set;}をゲッター/セッターに分解することがわかります。ゲッター/セッターに実際のロジックがないときにプライベート変数を作成するという定型コードを削減するための単なる「コンパイラマジック」です。ロジックがある場合は、このプライベート変数を自分で実装する必要があります。

+0

ありがとう、ジャスティン!ソリューションが機能しました。プライベート変数が他の画面で使用されていることに気がつきましたが、どうやってその理由を理解できませんでした。あなたはそれをとてもうまく説明しました。 – egucciar

+0

また、私はプログラミングとデバッグに新しいことがあります。実行中のプログラムの「内部ロジック」を見つけて、何が起きているのかを確認する最も良い方法は何ですか?今、私がしているのは、ブレークポイントが設定され、プログラムを一歩進んだだけです。私はgetとsetのロジックを踏み出すことができるだろうか? – egucciar