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

C#开发的Bot Framework聊天机器人如何通过后置代码更新任务模块

问题解答

你的需求完全可以实现。你用ASP.NET服务器控件的写法无效,是因为Teams的任务模块运行环境不支持Web Forms的PostBack回发机制,那套逻辑依赖ASP.NET的视图状态和表单同步提交,嵌入在Teams中的页面不会触发对应的后端绑定事件。


推荐实现方案(满足调用C#后端逻辑、更新表单的需求)

不用走任务模块提交的复杂逻辑,直接用AJAX调用后端接口拿到数据后前端填充表单即可,实现步骤如下:

  1. 把你原来的<asp:Button>服务器控件替换为普通HTML按钮,不要用runat="server"属性
  2. 给按钮绑定前端点击事件,用fetch发起异步请求调用你Razor Pages后端的处理方法
  3. 后端C#方法处理完逻辑返回需要填充的数据,前端拿到数据后直接操作DOM给对应文本框赋值

对应代码示例:

.cshtml 页面代码

<!-- 加防伪标记供AJAX请求校验 -->
@Html.AntiForgeryToken()
<input type="text" id="targetInput" placeholder="待填充的文本框" />
<button id="btnOperate" type="button">执行操作并填充</button>

<script>
document.getElementById('btnOperate').addEventListener('click', async () => {
    // 发起请求调用后端C#方法
    const response = await fetch('./?handler=OperateAndGetData', {
        method: 'POST',
        headers: {
            'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
        }
    });
    const result = await response.json();
    // 填充文本框
    document.getElementById('targetInput').value = result.FillContent;
});
</script>

.cshtml.cs 后置代码

public class YourPageModel : PageModel
{
    public IActionResult OnPostOperateAndGetData()
    {
        // 这里写你原本要在btnLogin_Click中执行的所有C#逻辑
        var fillContent = "经过业务逻辑计算得到的填充值";
        return new JsonResult(new { FillContent = fillContent });
    }
}

如果你需要整体更新任务模块的全部内容

如果你的场景需要替换整个任务模块的页面/布局,再用微软文档提到的任务模块响应逻辑:

  1. 页面中引入Teams JS SDK,点击按钮时调用microsoftTeams.tasks.submitTask()方法把需要的参数传给机器人后端
  2. 机器人的OnTeamsTaskModuleSubmitAsync方法中处理完业务逻辑后,返回TaskModuleContinueResponse类型的响应,携带新的任务模块配置信息,Teams会自动更新当前已打开的任务模块内容,不需要用户重新触发打开流程。

对应机器人端C#代码示例:

protected override async Task<TaskModuleResponse> OnTeamsTaskModuleSubmitAsync(ITurnContext<IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken)
{
    // 处理提交的业务逻辑
    var newTaskInfo = new TaskModuleTaskInfo
    {
        Url = "新的任务模块页面地址(可携带自定义参数)",
        Title = "更新后的任务模块标题",
        Height = 350,
        Width = 450
    };
    return new TaskModuleResponse
    {
        Task = new TaskModuleContinueResponse
        {
            Value = newTaskInfo
        }
    };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:04