我正在使用MS bot框架和FormDialog来要求用户填写表单。 我希望一些参数是可选的,因此为它们添加了[可选]指示:
[Prompt("Please specify if you have any additional requirements")]
[Optional]
string AdditionalRequirement { get; set; }
但是,当机器人填写表格时,这些问题仍会出现,用户无法跳过这些问题(例如只需键入“输入”或“跳过”)
我有什么问题或者这是预期的行为吗?是否可以设置一个用户可以跳过的参数,以防万一?
更新:似乎预期的行为是可选参数总是显示,并且某些单词可以理解为跳过问题,例如“无偏好”。
可以接受解释如何添加“跳过”作为跳过问题的单词之一的答案。
答案 0 :(得分:2)
我可以考虑实现这两种可能的方法(我无法测试它们,对不起!)
1)使用Template
属性装饰可选字段,并指定TemplateUsage.NoPreference
用法。
[Template(TemplateUsage.NoPreference, "skip")]
2)将Skip术语添加到NoPreference
配置的FormBuilder<T>
数组中。类似的东西:
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>()
答案 1 :(得分: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;
}