Azure 机器人生成器:自适应卡-提交时调用方法

Azure 机器人生成器:自适应卡-提交时调用方法,azure,botframework,form-submit,adaptive-cards,Azure,Botframework,Form Submit,Adaptive Cards,我需要创建一个表单,用户必须在其中填写并发送它。所以我必须创建一个submit按钮来调用另一个方法,但是我找不到submit操作和调用另一个方法之间的链接 我表格的脚本是: public Attachment CreateAdaptiveCardwithEntry() { var submitActionData = JObject.Parse("{ \"Type\": \"SaveFunction\" }"); var card

我需要创建一个表单,用户必须在其中填写并发送它。所以我必须创建一个submit按钮来调用另一个方法,但是我找不到submit操作和调用另一个方法之间的链接

我表格的脚本是:

public Attachment CreateAdaptiveCardwithEntry()
        {
            var submitActionData = JObject.Parse("{ \"Type\": \"SaveFunction\" }");
            var card = new AdaptiveCard()
            {

                Body = new List<CardElement>()
                {  
                    // Hotels Search form  

                    new TextBlock() { Text = "Titre de la note des frais" },
                    new TextInput()
                    {
                        Id = "titre",
                        Speak = "<s>Veuillez saisir le titre</s>",
                        Placeholder = "Veuillez saisir le titre",
                        Style = TextInputStyle.Text
                    },

                },

                Actions = new List<ActionBase>()
                {
                    new SubmitAction()
                    {
                       DataJson = submitActionData.ToString()

                    }
                }
            };
公共附件CreateAptiveCardWithEntry()
{
var submitActionData=JObject.Parse(“{\”类型\“:\”保存函数\“}”);
var卡=新的自适应卡()
{
Body=新列表()
{  
//酒店查询表格
新建TextBlock(){Text=“Titre de la note des frais”},
新文本输入()
{
Id=“titre”,
Speak=“Veuillez Saiser le titre”,
占位符=“Veuillez saisir le titre”,
Style=TextInputStyle.Text
},
},
操作=新列表()
{
新提交
{
DataJson=submitActionData.ToString()
}
}
};
我的卡片的脚本是:

    var replyMessage = context.MakeMessage();
    replyMessage.Attachments = new List<Attachment> { FraisDialog.CreateAdaptiveCardwithEntry() };
    await context.PostAsync(replyMessage, CancellationToken.None);
    context.Wait(MessageReceived);
var replyMessage=context.MakeMessage();
replyMessage.Attachments=新列表{FraisDialog.CreateAptiveCardWithEntry()};
wait context.PostAsync(replyMessage,CancellationToken.None);
Wait(MessageReceived);
MessageReceivedAsync中的脚本是:

public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
        {
            var message = await result;

            if (message.Value != null)
            {
                // Got an Action Submit
                dynamic value = message.Value;
                string submitType = value.Type.ToString();
                switch (submitType)
                {
                    case "SaveFunction":
                        await context.PostAsync("Please complete all the search parameters:\n");
                        return;
                }
            }
        }
公共虚拟异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果) { var消息=等待结果; if(message.Value!=null) { //收到一个提交的动作 动态值=message.value; 字符串submitType=value.Type.ToString(); 开关(提交类型) { 案例“SaveFunction”: wait context.PostAsync(“请完成所有搜索参数:\n”); 返回; } } } 在本例中,我需要用Id=“titre”发送信息,然后再进行处理,我不知道如何发送(DataJson?)和发送位置(MessageReceivedAsync?)。有人能帮我吗?我是否需要为卡创建另一个对话框

Ps:所有这些代码都在rootDialog中

我没有收到“请完成所有搜索参数”的消息

如果您的所有代码都在RootDialog中,请在发送附件后使用context.Wait(MessageReceivedAsync

我需要发送Id=“titre”的信息,然后再进行处理

单击“提交”按钮时,表单数据会像往常一样发送到MessageReceived方法。如果您只想访问自适应卡中的字段,可以访问动态变量值。下面是一个示例

var message = await result;

if (message.Value != null)
{
    // Got an Action Submit
    dynamic value = message.Value;
    string submitType = value.Type.ToString();
    switch (submitType)
    {
        case "SaveFunction":
            if(value.titre == "")
            {
                await context.PostAsync("Please complete all the search parameters:\n");
            }
            else
            {
                await context.PostAsync($"You entered {value.titre}");
            }
            return;
    }
}

您只想处理自适应卡中输入的字段?是的,这正是我想要的,但我无法触发提交操作。您能告诉我怎么做吗?触发提交操作是什么意思?您没有收到消息“请完成所有搜索参数”吗?这正是我的问题所在,我没有收到消息“请完成搜索”我将搜索参数改为“抱歉,我的bot代码有问题”,这是一个500内部服务器错误。我已经使用了context.Wait(MessageReceivedAsync);在发送我的附件后,如上面代码所示。就好像从未调用过MessageReceivedAsync方法一样,我已经在那里设置了一个断点,但它从未被命中。您是否认为该对话框导致的问题是一个LuisDialog而不是一个常规对话框?因为我以前从未在LuisDialog中见过MessageReceivedAsync方法ore.Luis Dialog?您没有指定任何关于Luis Dialog的内容,并且您提到所有内容都在根对话框中?Luis Dialog没有MessageReceiveDaSync。请使用问题的详细信息更改您的问题。好的,谢谢,我将更改它。因此,为了确认我们无法在Luis Dialog中触发提交操作,我们只需创建另一个管理自适应卡的对话框?尝试使用根对话框并转发到具有
上下文的LUIS对话框。转发
,这样您可以在点击LUIS之前根据需要操作
活动