2017-03-05 7 views
1

MSボットフレームワークとFormDialogを使用してフォームを記入するように求めています。 は、私はオプションであることをいくつかのパラメータを好きなので、それらに[オプション]表示を追加します:ボットは、フォームを充填したときFormDialogでのオプション

[Prompt("Please specify if you have any additional requirements")] 
[Optional] 
string AdditionalRequirement { get; set; } 

をしかし、これらの質問はまだ表示され、方法はありませんユーザーがそれらをスキップする(たとえば「入力」または「スキップ」と入力するだけ)

私は何か間違っている、またはこれが予想される動作ですか?必要でない場合にユーザがスキップできるパラメータを持つことは可能ですか?


更新:予想される動作は、オプションのパラメータが常に表示され、そのような「優先なし」などの質問をスキップとして理解することができる特定の単語があることであるようです。

質問をスキップする単語の1つとして「スキップ」を追加する方法を説明する回答が受け入れられます。

+0

はどうなりますか? –

+0

スキップは優先オプションの1つではありません。私は "いいえ"と書くことができ、それはフィールドにnullを入れます。これはオプションの動作なので、それが分かります。 –

+0

ソースコードに基づいて、 "no"、 "none"、 "I do not care"は、オプションのフィールドをスキップする有効な単語になると思われます。あなたはどんなふりをしていますか? –

答えて

2

私は(申し訳ありませんが、私はそれらをテストできませんでした!)、これを達成するための2つの方法で考えることができます

1)を指定し、Template属性とオプションのフィールドを飾りますこれはTemplateUsage.NoPreferenceです。

[Template(TemplateUsage.NoPreference, "skip")] 

2)FormBuilder<T>構成NoPreferenceアレイにスキップ用語を追加します。何かのように:あなたはのように使用することができます

public static IFormBuilder<T> CreateCustomForm<T>() 
    where T : class 
{ 
    var form = new FormBuilder<T>(); 
    var noPreferenceTerms = form.Configuration.NoPreference.ToList(); 
    noPreferenceTerms.Add("skip"); 
    form.Configuration.NoPreference = noPreferenceTerms.ToArray(); 

    return form; 
} 

:あなたは "スキップ" 書く場合

return CreateCustomForm<MyForm>() 
+0

最初のステップは必須ではなく、NoPreferenceの表示方法のみを変更します。それ以外は、素晴らしい作品です、ありがとう! –

0

私が知る限り、オプションの注釈をフィールドに追加する方法はありません。あなたができることが分かっているのは、デリゲートをメソッド(または匿名メソッド)に渡して、現在のフィールドがアクティブであるかどうかを調べるチェックを行うことです。そうでない場合、フィールドはユーザーにプロンプ​​トされません。 HERESに簡単な例:

public static IForm<MyForm> BuildForm() 
{ 
    return new FormBuilder<MyForm>() 
     .Field(nameof(AdditionalRequirement), active: IsAdditionalRequirementActive) 
     .Build(); 
} 

private static bool IsAdditionalRequirementActive(MyForm state) 
{ 
    if (state.SomeOtherField == "Value") 
     return true; 
    else 
     return false; 
} 
関連する問題