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,带有下拉菜单并根据提示捕获值的动态自适应卡 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

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

    按渐近增长率的非降序列出以下函数 如果两个或多个函数具有相同的渐近增长率 则将它们分组在一起 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 然后 当用户选