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

如何在Teams自适应卡片Tab应用中将模态弹窗数据传回主页签并刷新

实现Teams任务模块数据回传主页签并刷新卡片的方案

一、后端处理:构造任务模块提交响应

在OnTeamsTaskModuleSubmitAsync方法中,提取提交的Age数据后,需要返回包含数据的message类型响应,让前端能接收回传的值:

protected override Task<TaskModuleResponse> OnTeamsTaskModuleSubmitAsync(ITurnContext<IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
{
    // 从提交 payload 中提取年龄值
    var selectedAge = taskModuleRequest.Data["Age"].ToString();

    // 构造回传响应,将年龄数据放入Value中
    return Task.FromResult(new TaskModuleResponse
    {
        Task = new TaskModuleContinueResponse
        {
            Type = "message",
            Value = new { Age = selectedAge }
        }
    });
}

二、前端处理:监听任务模块回调并更新主页签

主页签的前端页面(通常是HomeTab对应的HTML/JS)需要在调用任务模块时指定success回调,接收回传数据后刷新卡片:

1. 初始化Teams SDK(页面加载时执行)

microsoftTeams.initialize();

2. 调用任务模块并设置回调

// 打开任务模块的函数
function openAgeSelectorTaskModule() {
    const taskModuleConfig = {
        url: "/taskmodule", // 你的任务模块页面URL
        title: "选择年龄组",
        height: 300,
        width: 400
    };

    // 启动任务模块,指定提交后的回调函数
    microsoftTeams.tasks.startTask(taskModuleConfig, handleTaskModuleSubmit);
}

// 处理任务模块提交的回调
function handleTaskModuleSubmit(result) {
    if (result && result.Age) {
        // 更新主页签的自适应卡片
        renderUpdatedCard(result.Age);
    }
}

3. 刷新并渲染更新后的卡片

可以选择前端直接构造卡片或调用后端接口获取更新后的卡片,以下是两种实现方式:

方式一:前端直接构造卡片
function renderUpdatedCard(selectedAge) {
    // 获取卡片容器(假设页面中有id为adaptiveCardContainer的元素)
    const cardContainer = document.getElementById("adaptiveCardContainer");

    // 构造包含年龄显示的自适应卡片
    const updatedCard = {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.4",
        "body": [
            // 新增年龄显示控件
            {
                "type": "TextBlock",
                "text": `已选择年龄组:${selectedAge}`,
                "size": "Medium",
                "weight": "Bolder"
            },
            // 保留原有卡片内容...
        ]
    };

    // 渲染更新后的卡片
    AdaptiveCards.renderCard(cardContainer, updatedCard);
}
方式二:调用后端接口获取更新后的卡片

如果卡片内容需要后端生成,可以新增后端接口保存数据并返回卡片:
// 后端HomeTab控制器新增接口

[HttpPost("update-selected-age")]
public IActionResult UpdateSelectedAge(string age)
{
    // 可选:将年龄存储到Session/数据库(根据业务需求)
    HttpContext.Session.SetString("SelectedAge", age);

    // 构造更新后的自适应卡片
    var adaptiveCard = new AdaptiveCard(new AdaptiveSchemaVersion(1, 4))
    {
        Body = new List<AdaptiveElement>
        {
            new AdaptiveTextBlock
            {
                Text = $"已选择年龄组:{age}",
                Size = AdaptiveTextSize.Medium,
                Weight = AdaptiveTextWeight.Bolder
            },
            // 原有卡片元素...
        }
    };

    return Json(adaptiveCard);
}

// 前端调用接口并渲染

function renderUpdatedCard(selectedAge) {
    fetch(`/homeTab/update-selected-age?age=${encodeURIComponent(selectedAge)}`, {
        method: "POST"
    })
    .then(res => res.json())
    .then(updatedCard => {
        const cardContainer = document.getElementById("adaptiveCardContainer");
        AdaptiveCards.renderCard(cardContainer, updatedCard);
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:10:22