2017-03-05 29 views
1

我正在使用MS bot框架和FormDialog來要求用戶填寫表單。 我想一些參數是可選的,因此添加[可選]指示他們:在FormDialog中可選

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

然而,這些問題仍然會出現,當機器人被填寫表格,並沒有辦法爲用戶跳過它們(例如,只需鍵入「輸入」或「跳過」)

有什麼我做錯了或是這是預期的行爲?如果沒有必要,用戶可以跳過一個參數嗎?


更新:似乎預期的行爲是可選的參數始終顯示並有一定的話,可以理解爲跳躍的問題,如「無要求」。

答案將解釋如何添加「跳過」作爲跳過問題的單詞之一將被接受。

+0

會發生什麼:

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; } 

那那麼你可以使用什麼樣的? –

+0

跳過並不是不偏好選項之一。我可以寫出「無偏好」,這將在該領域中產生一個空值。這是可選的行爲,所以它消失了。 –

+0

根據源代碼,似乎「不」,「無」,「我不關心」也是跳過可選字段的有效單詞。你在看什麼行爲? –

回答

2

我能想到在實現這一目標的兩種可能的方式(我無法測試他們,對不起!)

1)裝飾可選字段與Template屬性,指定TemplateUsage.NoPreference這個用法。

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

2)跳過術語添加到NoPreference陣列FormBuilder<T>配置。喜歡的東西:如果你寫 「跳過」

return CreateCustomForm<MyForm>() 
+0

第一步不是必需的,它只會改變NoPreference的顯示方式。除此之外,效果很好,謝謝! –

0

據我所知,沒有辦法將可選註釋添加到字段。我知道你可以做的是將一個委託傳遞給一個方法(或一個匿名方法),在這裏你可以執行一個檢查來查看當前字段是否處於活動狀態。如果沒有,該字段將不會被提示給用戶。下面有一個簡單的例子:

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; 
}