基于Composer与.NET SDK的Adaptive Card多选下拉框技术咨询
实现Adaptive Card多选用户下拉的方案
方案1:使用ChoiceSet控件(推荐)
Adaptive Card原生支持通过ChoiceSet控件实现多选功能,结合style: "compact"配置可模拟下拉框的交互体验,完全满足展示用户列表并允许多选的需求。
示例Card JSON
{ "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.4", "body": [ { "type": "ChoiceSet", "id": "selectedUsers", "label": "选择用户", "style": "compact", "multiSelect": true, "choices": [ { "title": "张三", "value": "user_001" }, { "title": "李四", "value": "user_002" }, { "title": "王五", "value": "user_003" } ] } ], "actions": [ { "type": "Action.Submit", "title": "确认选择" } ] }
.NET SDK中动态绑定用户列表
在Composer的自定义代码或.NET业务逻辑中,可从数据源(如AD、数据库)拉取用户列表,动态构建ChoiceSet的选项集合:
// 假设已从数据源获取用户数据 var userList = new List<AdaptiveChoice>(); foreach (var user in yourUserDataSource) { userList.Add(new AdaptiveChoice { Title = user.DisplayName, Value = user.Id.ToString() }); } // 构建多选ChoiceSet控件 var choiceSet = new AdaptiveChoiceSet { Id = "selectedUsers", Label = "选择用户", Style = AdaptiveChoiceSetStyle.Compact, MultiSelect = true, Choices = userList }; // 组装完整Adaptive Card var card = new AdaptiveCard("http://adaptivecards.io/schemas/adaptive-card.json") { Body = new List<AdaptiveElement> { choiceSet }, Actions = new List<AdaptiveAction> { new AdaptiveSubmitAction { Title = "确认选择" } } };
获取用户选中结果
用户提交卡片后,在机器人的处理逻辑中,可通过TurnContext提取选中的用户ID:
var activityValue = JObject.Parse(turnContext.Activity.Value.ToString()); var selectedUserIds = activityValue["selectedUsers"].ToObject<List<string>>();
方案2:自定义扩展控件(复杂场景)
如果需要完全贴合原生下拉多选的视觉样式,可通过Adaptive Card的自定义渲染扩展实现,但该方式需要前端配合修改渲染逻辑,对于基于Composer的机器人来说开发成本较高,仅推荐用于特殊定制场景。
内容的提问来源于stack exchange,提问作者Obla
相关产品推荐
相关产品推荐

