C#Bot框架:如何在表单流对话框中设置可选字段

本文关键字:对话框 设置 字段 表单 框架 C#Bot | 更新日期: 2023-09-27 17:59:20

我正在尝试构建一个包含表单流对话框的bot。我必须在表单生成器中为Optional创建一个字段。我在class属性中给出了[Optional]注释。但它不起作用。By Form会不断提示字段。我该如何控制?

form = new FormBuilder<myClass>()
                    .Message("Welcome")
                    .Field(nameof(xxx))
                    .Field(nameof(yyy),//make this field optional, if value is there then validate. But should not prompt if no value.                        
                        validate: async (state, value) =>
                        {
                        }

我的班级

[Serializable]
public class myClass
{
    [Prompt("I didnt get you")]       
    public string xxx{ get; set; }
    [Optional]       
    public string yyy{ get; set; }
}

C#Bot框架:如何在表单流对话框中设置可选字段

尝试

[Optional] 
public string yyy{ get; set; }

在官方文档中,自定义属性[可选]仅用于可为null的枚举属性。。。在这种情况下,它显示最后一个标记为"无偏好"的选项。

对于字符串,默认提示将显示您的问题,然后是"(当前选择:无偏好),显示它已填充默认值"无偏好",但用户仍需要回答该问题。

如果你需要根据特定规则跳过这个问题,你可以实现下面例子中的活动属性:

  public static IForm<YourStateClass> Build()
  {
     return new FormBuilder<SandwichOrder>()
     .Field(nameof(PropertyName), active: (state) => { 
          // here goes your code that need to return a boolean where true will show the field and false will skip 
      })
     .Build();
  }