2017-05-23 13 views
1

私はクラスの下にフォームビルダーのコードを持っています。フィールド "ConfirmISTTimeZone"に対するユーザーの応答が "Yes"の場合、 "TimeZone"フィールドのプロンプトが表示されます。それ以外の場合は、 "Duration"を直接プロンプトする必要があります これを行う方法?あなたがFieldReflectorクラスで、そのためにSetActive方法を使用することができます私はボットフレームワークのアプリケーションの前のフィールドの結果に基づいてさらにフィールドを入力したい

var formflow = new FormBuilder<FlightBooking>().Message("Tell me Flight details!") 
     .Field(nameof(Flightname)) 
     .Field(nameof(StartDate), validate: ValidateStartDate) 
     .Field(nameof(ConfirmISTTimeZone), validate: ValidateResponseOfTimeZone) 
     .Field(nameof(TimeZone), validate: ValidateTimeZone) 
     .Field(nameof(Duration), validate: ValidateDuration) 

答えて

1

var formflow = new FormBuilder<FlightBooking>().Message("Tell me Flight details!") 
     .Field(nameof(Flightname)) 
     .Field(nameof(StartDate), validate: ValidateStartDate) 
     .Field(nameof(ConfirmISTTimeZone), validate: ValidateResponseOfTimeZone) 
     .Field(new FieldReflector<FlightBooking>(nameof(TimeZone)) 
       .SetActive(CheckActiveMethod) 
       .SetValidate(ValidateTimeZone)) 
     .Field(nameof(Duration), validate: ValidateDuration) 

CheckActiveMethodは、フィールドがアクティブで、フィールドをスキップすることができれば、プロンプトが表示され、または偽すべきか、状態を取り、真のいずれかを返すだけの方法です。

+0

ok.Thanksを、私は持っています1つの質問、ValidateTimeZoneメソッドは、私がValidateTimeZoneにDB関連のコードを持っているので、formbuilderが実行されるたびに実行され、サーバーのリクエストを増やすので毎回実行したくないため、formbuilderが実行されているときのみValidateTimeZoneを実行したいTimeZoneフィールドの処理、 –

+0

私は過去に似たような問題がありました。最初に、メソッドに渡された値にユーザーが入力した値またはデフォルト値があるかどうかを確認します。そうでなければ、彼はおそらくまだ前のステップで忙しいでしょう。値が有効になると状態にも表示され、その値が一杯になっているかどうかを確認できます。 –

2

別のオプションは、次のとおりです。タイムゾーン

の分野で 'アクティブActiveTimeZone' を

選択図】図(がNameOf(タイムゾーン)、アクティブ:ActiveTimeZone、検証:ValidateTimeZone)を

private bool ActiveTimeZone(FlightBooking state) 
    { 
     bool setActive = true; 
     if (!state.ConfirmISTTimeZone.Contains("Add ur condition here")) 
      setActive = false; 


     return setActive; 

    } 
関連する問題