我已经实施了英雄卡片旋转木马,以显示特定文档可以拥有的所有时间表。在英雄卡片中,我添加了一个按钮来选择特定的时间表。以下是代码
private async Task ShowSessionsHeroCard(IDialogContext context)
{
var replyToConversation = context.MakeMessage();
replyToConversation.AttachmentLayout = AttachmentLayoutTypes.Carousel;
replyToConversation.Attachments = await GetSessionHeroCard(context);
//replyToConversation.Attachments.Add(GetSessionHeroCard());
await context.PostAsync(replyToConversation);
}
private async Task<List<Attachment>> GetSessionHeroCard(IDialogContext context)
{
List<Attachment> list = new List<Attachment>();
List<CardAction> cardButtons = new List<CardAction>();
foreach (var sessionDetails in scheduleList)
{
string[] session = GetSplittedDetails(sessionDetails);
hospitalName = session[0]; //Hospital Name: {0}
availableDay = session[1]; //Available Day: {1}
appointmentNo = session[2]; // Appoinment No: {2}
sessionAvailable = session[3]; // Session: {3}
HeroCard hero = new HeroCard()
{
Title = hospitalName,
Subtitle = availableDay,
Text = sessionAvailable + appointmentNo,
Buttons = cardButtons
};
list.Add(hero.ToAttachment());
}
CardAction getSessionValues = new CardAction()
{
Value = hospitalName + availableDay + sessionAvailable + appointmentNo,
Type = ActionTypes.ImBack,
Title = " Select Appointment "
};
cardButtons.Add(getSessionValues);
string selectedAppointment = getSessionValues.Value.ToString();
await GetSelectedAppointment(context, selectedAppointment);
return list;
}
private async Task GetSelectedAppointment(IDialogContext context, string sessionSelected)
{
var replyToConversation = context.MakeMessage();
//replyToConversation.AttachmentLayout = AttachmentLayoutTypes.List;
string[] result = Utility.SplitSelectedApoitmentString(sessionSelected);
var heroCard = new HeroCard()
{
Title = "Appointment Schedule",
Subtitle = "These are the Appointment Details",
Text = "Hospital selected : " + result[0] + "\n" + "Day of Appointment : " + result[1] + "\n" + "Time of Appointment : " + result[2] + "\n" + "Appointment Number" + result[3],
}.ToAttachment();
Attachment attachment = new Attachment()
{
Content = heroCard.Content,
ContentType = heroCard.ContentType
};
replyToConversation.Attachments.Add(attachment);
await context.PostAsync(replyToConversation);
}
我的问题是
我无法弄清楚这里有什么问题请帮助。 (我肯定在做一些非常愚蠢的事情。)
提前致谢:)
答案 0 :(得分:2)
有点难以理解您的代码,并且不清楚是谁调用GetSessionHeroCard
方法,但是,我认为您对如何处理卡片存在误解。
使用带按钮的卡时需要遵循的一般步骤是:
context.Wait
等待X方法(可能在MessageReceivedAsync或新方法中)。这是关键,因为这个方法是一旦点击按钮就会收到带有值的消息。 您可以查看RichCards示例和Contoso Flowers示例,以便了解相关信息。