Как добраться до следующего водопада после подсказки выбора? - PullRequest
2 голосов
/ 21 октября 2019

На первом этапе этого диалога я хочу спросить пользователя, что он хочет сделать с подсказкой Choice. После возврата, когда я ожидаю, что диалог перейдет к следующему шагу Waterfallstep (HandleChoiceAsync), он вместо этого вернется к своему родительскому диалогу.

Кажется, я помню, раньше это работало. Заранее спасибо!

MainDialog

OrdersDialog

private async Task<DialogTurnResult> AskForProductsAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        productList = (List<Product>)stepContext.Options;  

        if(productList.Count > 0)
        {
            string producten = "";

            foreach(Product p in productList)
            {
                producten += p.GetProductName() + ", ";
            }
            producten = producten.Remove(producten.Length - 2);
            await stepContext.Context.SendActivityAsync("In je bestelling staan nu de volgende producten: " + producten + ".");
        }

        //choice prompt does not go to next waterfallstep, instead returns to parent dialog
        return await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions
        {
            Prompt = MessageFactory.Text("Wil je nog een product toevoegen of verwijderen?"),
            RetryPrompt = MessageFactory.Text("Probeer het nog een keer"),
            Choices = ChoiceFactory.ToChoices(new List<string> { "Toevoegen", "Verwijderen", "Klaar met bestellen" })
        }, cancellationToken);
    }

    private async Task<DialogTurnResult> HandleChoiceAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
    {
        FoundChoice choice = (FoundChoice)stepContext.Result;
        switch (choice.Index)
        {
            case 0:
                toevoegen = true;
                var messageText = "Welk product wil je toevoegen?";
                var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
                return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken);
            case 1:
                toevoegen = false;
                List<string> productsString = new List<string>();
                foreach (Product p in productList)
                {
                    productsString.Add(p.GetProductName());
                }
                return await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions
                {
                    Prompt = MessageFactory.Text("Welk product wil je verwijderen?"),
                    Choices = ChoiceFactory.ToChoices(productsString)
                }, cancellationToken);
            case 2:
                return await stepContext.EndDialogAsync(productList);
            default:
                break;

        }

        return await stepContext.NextAsync();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...