c# - 使单击的按钮重定向到特定页面
问题描述
public virtual async Task ShowAnnuvalConferenceTicket(IDialogContext context, IAwaitable<IMessageActivity> activity)
{
var message = await activity;
PromptDialog.Choice(
context: context,
resume:ChoiceReceivedAsync ,
options: (IEnumerable<ProductGroups>)Enum.GetValues(typeof(ProductGroups)),
prompt: " ",
promptStyle: PromptStyle.Auto
);
}
public virtual async Task ChoiceReceivedAsync(IDialogContext context, IAwaitable<ProductGroups> activity)
{
ProductGroups response = await activity;
context.Call<object>(new AnnualPlanDialog(response.ToString()), ChildDialogComplete);
}
public virtual async Task ChildDialogComplete(IDialogContext context, IAwaitable<object> response)
{
var respond = await response as Activity;
if (respond = ProductGroups.MoreCategories)
{
await context.PostAsync("Click here to view more categories");
context.Done(this);
}
}
public enum ProductGroups {
Toys,
Electronics,
Phones,
Health,
Beauty,
Computers,
Cameras,
Jewelery,
Watches,
Weddings,
MoreCategories
}
美好的一天,请我在这些方面需要帮助,我一直在尝试获取从枚举常量生成的选项列表,每个选项都将我重定向到不同的页面,但知道如何去做。请问有什么帮助吗?
解决方案
如果你想打开一个 url,那么你可以通过按钮使用英雄卡。您可以使用标题和链接创建字典,也可以使用枚举。这是我解决的问题:
而不是发送提示
var reply = context.MakeMessage();
List<CardAction> enumOptions = new List<CardAction>();
foreach(ProductGroups option in Enum.GetValues(typeof(ProductGroups)))
{
enumOptions.Add(new CardAction
{
Title = option.ToString(),
Type = option.ToString().Equals("MoreCategories") ? ActionTypes.ImBack : ActionTypes.OpenUrl,
Value = option.GetType()
.GetMember(option.ToString())
.First()
.GetCustomAttribute<DescribeAttribute>()
.Description
});
}
reply.Attachments.Add(GetHeroCard(null, null, null, null, enumOptions));
await context.PostAsync(reply);
CardAction 中的类型属性将决定单击按钮时要执行的操作。因此,如果用户单击 MoreCategories 以外的任何按钮,则会打开一个链接,如果用户单击 MoreCategories,则机器人将收到消息 moreCategories,然后您可以对其进行处理。
GetHeroCard 只是一个基本函数,您可以调用它来创建任何英雄卡:
public static Attachment GetHeroCard(string title, string subTitle, string text, List<CardImage> images, List<CardAction> action)
{
HeroCard card = new HeroCard();
if (!String.IsNullOrEmpty(title))
card.Title = title;
if (!String.IsNullOrEmpty(subTitle))
card.Subtitle = subTitle;
if (!String.IsNullOrEmpty(text))
card.Text = text;
if (images != null)
card.Images = images;
if (action != null)
card.Buttons = action ;
return card.ToAttachment();
}
您可以像这样更新您的枚举:
public enum ProductGroups
{
[Describe("https://stackoverflow.com/")]
Toys,
[Describe("https://stackoverflow.com/")]
Electronics,
[Describe("https://stackoverflow.com/")]
Phones,
[Describe("https://stackoverflow.com/")]
Health,
[Describe("https://stackoverflow.com/")]
Beauty,
[Describe("https://stackoverflow.com/")]
Computers,
[Describe("https://stackoverflow.com/")]
Cameras,
[Describe("https://stackoverflow.com/")]
Jewelery,
[Describe("https://stackoverflow.com/")]
Watches,
[Describe("https://stackoverflow.com/")]
Weddings,
[Describe("More categories")]
MoreCategories
}
输出
推荐阅读
- javascript - React Redux - 尝试使用 React-DnD 和 mapDispatchToProps 时遇到问题
- android - 使用光刻的 2D 可滚动列表/平移功能?
- spring-mvc - 问题:@SessionScope 在 JHipster API Gateway Java 应用程序中有效吗?
- javascript - 使用 DynamoDB 的 AWS Lambda 顺序问题
- json - 使用 jsonnet 覆盖嵌套列表元素
- laravel - 让值在 Payfast 中传递
- php - 检查 PHP 中两个数组中的值是否相同(即使值的顺序不同)
- boolean - 在 LabVIEW 2018 的案例结构中将二进制转换为十进制
- python - 在 Python 中的条件下替换数据框列中的 Impute Resample 值
- sql - 如何从具有许多前缀/命名空间的 xml 中获取数据