FormDialog中的可选项

时间:2017-03-05 16:32:24

标签: c# botframework

我正在使用MS bot框架和FormDialog来要求用户填写表单。 我希望一些参数是可选的,因此为它们添加了[可选]指示:

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

但是,当机器人填写表格时,这些问题仍会出现,用户无法跳过这些问题(例如只需键入“输入”或“跳过”)

我有什么问题或者这是预期的行为吗?是否可以设置一个用户可以跳过的参数,以防万一?

更新:似乎预期的行为是可选参数总是显示,并且某些单词可以理解为跳过问题,例如“无偏好”。

可以接受解释如何添加“跳过”作为跳过问题的单词之一的答案。

2 个答案:

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