Заставить нажатие кнопки перенаправить на определенную страницу - PullRequest
0 голосов
/ 05 июня 2018
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
        }

Добрый день, пожалуйста, мне нужна помощь по этим вопросам, я пытался получить список опций, сгенерированных из перечисленной константы, каждая из которых перенаправляла меня на разные страницы, но знаю, как это сделать.Любая помощь, пожалуйста?

1 Ответ

0 голосов
/ 05 июня 2018

Если вы хотите открыть URL, тогда вы можете использовать Карты Героев только с помощью кнопок.Вы можете создать словарь с заголовком и ссылкой или использовать перечисление.Вот кое-что, с чем я работал:

Вместо отправки Prompt

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
}

ВЫХОД

Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...