You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bot Framework表单开发疑问:选项A重置流程及GroupOptions枚举配置

Bot Framework C# 表单问题解决方案

嘿,针对你制作表单时遇到的两个问题,我来帮你逐一解决:

一、枚举GroupOptions的描述文本显示问题

你已经给枚举值加上了[Describe]属性,但大概率是遇到了表单里显示的是枚举原始名称(比如GrupoZ)而非你定义的Grupo A这类描述文本的问题。要让描述正常生效,你可以这么做:

首先确保你引用的是**Microsoft.Bot.Builder.FormFlow.DescribeAttribute**这个命名空间下的属性,别引错了。然后在构建表单字段时,手动映射枚举值和它的描述文本:

var formBuilder = new FormBuilder<YourFormModel>()
    .Field(nameof(YourFormModel.GroupSelection), field =>
    {
        field.SetDefine(async (state, field) =>
        {
            // 遍历枚举的所有值,读取对应的Describe属性
            foreach (GroupOptions enumVal in Enum.GetValues(typeof(GroupOptions)))
            {
                var memberInfo = typeof(GroupOptions).GetMember(enumVal.ToString())[0];
                var descAttr = memberInfo.GetCustomAttributes(typeof(DescribeAttribute), false)
                    .FirstOrDefault() as DescribeAttribute;
                
                // 如果有描述就用描述,没有就用枚举名称
                var displayText = descAttr?.Description ?? enumVal.ToString();
                field.AddChoice(enumVal, displayText);
            }
            return Task.CompletedTask;
        });
    });
var form = formBuilder.Build();

另外注意你的第一个枚举值GrupoZ对应描述是Grupo A,如果这是笔误的话记得修正哦,避免后续逻辑混淆。

二、表单选项“A”触发流程重置的问题

选项“A”会重置流程,通常是这几个原因导致的,你可以逐一排查:

  • 内置命令冲突:FormFlow默认有一些全局命令,比如restart、start over,如果你的代码里不小心把“A”添加到了重启命令的触发词里,就会触发重置。你可以修改或移除冲突的命令:
var form = new FormBuilder<YourFormModel>()
    .Field(nameof(YourFormModel.GroupSelection))
    .Configure(config =>
    {
        // 移除默认的重启命令,或者修改它的触发词
        var restartCmd = config.Commands.FirstOrDefault(c => c.Command == FormCommand.Restart);
        if (restartCmd != null)
        {
            // 替换触发词,避免和选项“A”冲突
            restartCmd.Terms = new[] { "重启", "重新开始", "start over" };
            // 或者直接移除:config.Commands.Remove(restartCmd);
        }
    })
    .Build();
  • 输入匹配逻辑太宽松:如果表单的匹配模式是模糊匹配,单独输入“A”可能会被误识别为某个指令或者触发了流程跳转。你可以设置为精确匹配:
.Configure(config =>
{
    config.MatchMode = MatchMode.Exact;
})
  • 自定义回调里的重置逻辑:检查你是否在表单的OnCompletion、字段的Validate或者其他回调方法里,添加了选择“A”时重置流程的代码(比如await context.ResetDialogAsync()),如果有的话调整逻辑即可。

内容的提问来源于stack exchange,提问作者IvanHid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:24