我想问一下如何正确使用缩略图卡片按钮。我希望按钮专门用context.Wait(methodName)调用一个新方法。 现在我有缩略图卡按钮的代码:
thumbnailCard.Buttons = new[] {new CardAction(
ActionTypes.MessageBack, $"Account", value: id
)};
var msg = context.MakeMessage();
msg.AttachmentLayout = AttachmentLayoutTypes.Carousel;
msg.Attachments = cardAttachment.ToList();
await context.PostAsync(msg);
context.Wait(methodName); **I want this to be called when button was clicked**
但显然我无法点击按钮时触发该方法。 PS:我实际上是bot框架的新手,所以任何帮助都将受到赞赏。感谢。
注意:可能的重复不是我遇到的问题。我没有通过thumbnail.Buttons调用方法,而是我使用context.Wait(MethodName)
插入需要传递给另一个方法的值,但是我们有关于如何正确实现它的相同方法,但它没有回答问题为什么我无法将我插入到上下文中的方法回火。等等。
答案 0 :(得分:0)
你真的需要使用context.Wait
还是你正在尝试的?你可以使用它,但它会在点击按钮后等待消息,所以它似乎不是你想要的。请回复,我可以根据您的需要调整我的答案。
看起来你只想按一下按钮后执行一个方法。为此,您可以使用以下代码并根据需要进行调整,这是我能想到的最简单的实现。如果您有任何后续问题或需要其他问题,请告诉我们:
private async Task MessageReceivedAsync(IDialogContext context,
IAwaitable<object> result)
{
var activity = await result as Activity;
var response = activity.CreateReply();
IMessageActivity reply = context.MakeMessage();
if (activity.Text.ToLowerInvariant() == "do stuff")
{
activity.CreateReply("I have done the stuff");
await context.PostAsync(activity);
}
else
{
List<CardAction> cardButtons = new List<CardAction>();
CardAction Button = new CardAction
{
Title = "do stuff",
//Type = ActionTypes.ImBack; //this will display "do stuff" in the chat window
Type = ActionTypes.PostBack, //same behavior except "do stuff" not displayed
Value = "do stuff"
};
cardButtons.Add(Button);
HeroCard Card = new HeroCard()
{
Buttons = cardButtons
};
Attachment plAttachment = Card.ToAttachment();
reply.Attachments.Add(plAttachment);
await context.PostAsync(reply);
}
context.Wait(MessageReceivedAsync);
}
答案 1 :(得分:0)
感谢大家的回复。我已使用ActionTypes.PostBack
解决了该问题,但未使用MessageBack
和ImBack
。
是的,我仍然使用Context.Wait(method)
。