botbuilder v 4,带有下拉菜单并根据提示捕获值的动态自适应卡

2024-04-20

我正在使用 ms botbuilder v 4 我正在使用 webcontrol、webchat.js、最新、react 案例非常简单: 我想在下拉列表中显示可能值的列表,值将是动态的(来自 API,我需要那里的标题和值(Id)。然后,当用户选择某个项目并单击“确定”时,我想获取值(Id)并进一步工作接着就,随即。 据我所知,目前显示下拉菜单的唯一方法是使用自适应卡,在 v3 中,有一个在提示中使用自适应卡的选项,并且还计划在下一个版本中使用:https://github.com/Microsoft/botbuilder-dotnet/issues/1170 https://github.com/Microsoft/botbuilder-dotnet/issues/1170但目前仅解释此问题的解决方法:https://github.com/Microsoft/botbuilder-dotnet/issues/614 https://github.com/Microsoft/botbuilder-dotnet/issues/614,只需字符串列表,一切工作正常,但如果我想存储键值对(对于 ID),我无法做到这一点,因为 PromptOptions 中的选择仅接受字符串列表(将在下面显示)。所以我现在使用的唯一解决方法是存储整个值集合,并在获得结果后找到它的 id。有没有更方便的解决方案? 这是代码:

var choicesInputs = _teams.Select(s => new AdaptiveChoice { Title = s.Value, Value = s.Value}).ToList();

var card = new AdaptiveCard
{
    Version = new AdaptiveSchemaVersion(1, 0),
    Body =
    {
        new AdaptiveTextBlock("Select a team to assign your ticket"),
        new AdaptiveChoiceSetInput
        {
            Choices = choicesInputs,
            Id = "setId",
            Style = AdaptiveChoiceInputStyle.Compact,
            IsMultiSelect = false
        }
    },
    Actions = new List<AdaptiveAction>
    {
        new AdaptiveSubmitAction
        {
            Title = "Ok",
            Type = "Action.Submit"
        }
    }
};

signInPhoneState.Teams = _teams;

return await stepcontext.PromptAsync(
    "SelectGroupCardDialog",
    new PromptOptions
    {
            Choices = ChoiceFactory.ToChoices(_teams.Select(pair => pair.Value).ToList()),
        Prompt = (Activity) MessageFactory.Attachment(new Attachment
        {
            ContentType = AdaptiveCard.ContentType,
            Content = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(card))
        })
    },
    cancellationtoken);

// . . .

var selectedTeamId = signInPhoneState.Teams.FirstOrDefault(pair => pair.Value == sel).Key;

快速附带问题(但与我使用它作为解决方法相关): 通过对话框保存某些变量的最简单方法是什么?如果我没记错的话,在 v3 中,它就像将值标记为公共并将对话框标记为可序列化一样简单,就是这样,现在我明白了,您需要为每个对话框创建特殊的访问器,在那里复制属性并管理它的状态,这是对的吗? 谢谢


您有一个字典,其中团队 ID 作为键,团队名称作为值。您使用团队名称作为提示中使用的自适应选择集的值,并且在提示之后,您使用团队名称从字典中提取团队 ID。您想要一个更方便的选择。

选项 1:如果您同意当前保持字典可用的设置

访问字典中的数据时,使用键访问值比相反方式更有效。毕竟,这就是词典的用途。因此,您可以使用团队 ID,而不是使用团队名称作为选择集中的值。

var choicesInputs = _teams.Select(s => new AdaptiveChoice { Title = s.Value, Value = s.Key }).ToList();

// . . .

signInPhoneState.Teams.TryGetValue(sel, out string selectedTeamName);

这意味着,如果字典是从某些可能会更改的外部源中提取的,则团队名称将尽可能是最新的。

选项 2:如果您不想在下一轮中依赖字典

您可以将团队 ID 和团队名称存储在选项值中。

var choicesInputs = _teams.Select(s => new AdaptiveChoice { Title = s.Value, Value = JsonConvert.SerializeObject(s) }).ToList();

// . . .

var pair = JsonConvert.DeserializeObject<KeyValuePair<string, string>>(sel);
var selectedTeamId = pair.Key;
var selectedTeamName = pair.Value;

这意味着如果基础数据在第一轮提示和第二轮提示之间发生变化,选择仍然有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

botbuilder v 4,带有下拉菜单并根据提示捕获值的动态自适应卡 的相关文章

  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • 头文件中实现的函数的静态与内联

    我想到的方式inline在 C 中用于链接 作用域 我把它放在同一个篮子里extern and static对于全局对象 通常 对于在头文件中实现的函数 我的首选解决方案是将其设为静态 In Foo h static void foo Do
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • std::make_pair 与浮点数组(float2,无符号整数)

    我有一个用 float2 unsigned int 对模板化的向量 例如 std vector
  • ASP.NET MVC 动作过滤器

    有谁知道即使在 CATCH 块中 ActionFilterAttribute 类的 OnResultExecuted 方法是否也会执行 ie CookiesActions public ActionResult Login Usuarios
  • linq where 子句和 count 导致 null 异常

    除非 p School SchoolName 结果为 null 否则下面的代码将起作用 在这种情况下 它会导致 NullReferenceException if ExistingUsers Where p gt p StudentID i
  • 从 C# 调用时无法识别 Powershell 命令

    这是这个的延续Question https stackoverflow com questions 66280000 powershell object returns null 66280138 noredirect 1 comment1
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和

随机推荐

  • 按渐近增长率对函数排序

    按渐近增长率的非降序列出以下函数 如果两个或多个函数具有相同的渐近增长率 则将它们分组在一起 g1 n n g2 n n 3 4n g3 n 2n log 以 2 为底 n g4 n 2 n g5 n 3 3 log 以 3 为底 n g6
  • 在 JSF 中使用消息束时从验证消息中删除组件 ID

    我正在练习JSF 我创建了一个带有用户 ID 和密码字段的登录屏幕 现在两个输入字段都需要 true 我创建了 message properties 文件并向其中添加了以下验证 ID javax faces component UIInpu
  • Codeigniter:使用 RESTful 服务

    是否有一个易于设置的 Codeigniter REST 库 我可以用它来使用 RESTful 服务 我尝试设置this https github com philsturgeon codeigniter restclient图书馆 但无法设
  • 无法在 macOS High Sierra 上打开 SQL 编辑器

    自从更新到 macOS High Sierra 以来 我一直无法在 MySQL Workbench 上打开 SQL 编辑器 When I try to connect to the database as usual I m given t
  • 如何获取真实的UTC时间戳(与客户端无关)?

    有没有办法获得real当前 UTC 时间戳而不依赖于客户端时间 这可能无法在每个客户端上正确设置 我知道 JavaScript 的getTime 我可以获取以毫秒为单位的 UTC 时间戳 它独立于客户的时区 但我认为它取决于客户的当前时间
  • CoTaskMemAlloc v malloc v AllocHGlobal

    我读过 在 Windows 上 malloc 与 CoTaskMemAlloc 不同 CoTaskMemAlloc 与 AllocHGlobal 不同 对于 C 用户来说 这意味着如果我有一个返回 malloc 指针的 C 函数 我需要对其
  • Android SeekBar 最小和连续浮点值属性

    我正在寻找一种在 SeekBar 中实现最小值的方法 并且还可以选择增加十进制数字 例如 当前我的 SeekBar 的最小值设置为 0 但我需要它从值 0 2 开始 另外 我希望能够让用户以 0 1 的精度选择 0 2 到 10 0 之间的
  • 如何理解Cassandra中的“灵活模式”?

    我是 Cassandra 的新手 可以在下面的维基百科中找到 列族 自 CQL 3 起称为 表 类似于 RDBMS 关系数据库管理系统 中的表 列族包含行和列 每行都由行键唯一标识 每行有多列 每列都有名称 值和时间戳 与 RDBMS 中的
  • 在 Windows 10 和 PHP 7.3 中安装 AMQP

    我想在 Windows 10 中使用 PHP 7 3 安装 AMQP 以便在 symfony 4 中使用 Windows 不使用任何 apache iis nginx 并直接由 symfony 运行 一切还好 直到 我决定在项目中使用rab
  • ggplot2:将面/条文本分割成两行

    考虑以下带有长面 条带文本的 ggplot2 图 断成两行 该文本超出了专门用于分面标题的区域 library ggplot2 x lt c 1 3 1 3 y lt c 3 1 1 3 grp lt c 0 0 0 1 1 1 p lt
  • Javascript:作用域链何时创建?

    我听到过两种说法 当定义函数时 In book Professional Javascript for Web Developers 3rd Edition 在里面Chapter 7 Function Expressions封闭部件 当co
  • 400 错误。需要收件人地址。卷曲

    我将 Gmail API 与curl一起使用 用户 消息 发送 https developers google com gmail api v1 reference users messages send 但我收到错误 400 需要收件人地
  • 寻找最大最小值集合

    我正在尝试编写一个 天真的或半天真的 程序 给定一组元素和许多玩家将其划分为这个数量的玩家 并且对于每个这样的划分取最小值 按总和 子集 然后 我想计算所有这些最小除法的最大值 这被称为https en wikipedia org wiki
  • 回归测试是整个测试套件还是测试样本?

    我被告知回归测试是整体测试的一个小样本 仅足以证明引入更改或新模块时没有破坏任何内容 然而 本文 http www iceincusa com 16csp content 16 smoke smkrgt htm罗恩 莫里森和格雷迪 布奇的著
  • 我必须初始化简单的类成员变量吗? [复制]

    这个问题在这里已经有答案了 快速初学者问题 Do I have初始化简单的类成员变量 或者是否保证在任何情况下都为它们分配默认值 Example class Foo int i is i 0 or do I need the followi
  • 使用 JavaScript 使文本框可编辑

    我有一个文本框readonly readonly 这意味着我无法编辑它 但我想要的是当用户双击该文本框时使其可编辑 我已经尝试过的是
  • 使用装饰器将类方法包装在 try / except 中

    我有一个通用函数 可以将有关异常的信息发送到应用程序日志 我用exception handler来自类中方法的函数 传入并由应用程序调用的应用程序日志处理程序exception handler创建一个 JSON 字符串 该字符串是实际发送到
  • 如何在 angularjs/bootstrap 中预填充对话框

    这个问题是关于使用 bootstrap css 和 javascript 的 angularjs 我有一个要显示和设置的项目列表 单击它们会打开一个对话框 允许您更改值 像这样的事情 ul li item text li ul div cl
  • 线程“main”中出现异常java.lang.UnsupportedClassVersionError,不支持的major.minor版本52.0

    我尝试在 hadoop 1 0 4 上运行 WordCount 示例 但收到以下错误 Exception in thread main java lang UnsupportedClassVersionError WordCount Uns
  • botbuilder v 4,带有下拉菜单并根据提示捕获值的动态自适应卡

    我正在使用 ms botbuilder v 4 我正在使用 webcontrol webchat js 最新 react 案例非常简单 我想在下拉列表中显示可能值的列表 值将是动态的 来自 API 我需要那里的标题和值 Id 然后 当用户选