На первом этапе этого диалога я хочу спросить пользователя, что он хочет сделать с подсказкой 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();
}