在 FormDialog 中可选

Optional in FormDialog

我正在使用 MS 机器人框架和 FormDialog 要求用户填写表格。 我希望某些参数是可选的,因此向它们添加了 [Optional] 指示:

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

但是,当机器人填写表格时,这些问题仍然出现,用户无法跳过它们(例如只需键入 "enter" 或 "skip")

我做错了什么或者这是预期的行为吗?是否可以有一个用户可以在不需要时跳过的参数?


更新:似乎预期的行为是可选参数总是显示并且有某些单词可以理解为跳过问题,例如"No preference"。

将接受解释如何添加 "skip" 作为跳过问题的单词之一的答案。

据我所知,没有办法向字段添加可选注释。我知道您可以做的是将委托传递给一个方法(或匿名方法),您可以在其中执行检查以查看当前字段是否处于活动状态。如果不是,则不会向用户提示该字段。这是一个简短的例子:

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

我可以考虑两种可能的方法来实现这一点(我无法测试它们,抱歉!)

1) 用 Template 属性修饰可选字段,指定 TemplateUsage.NoPreference 用法。

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

2) 将 Skip 项添加到 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>()