簡體   English   中英

使用列表對象Bot框架提示對話框選擇

[英]Prompt Dialog Choice with List object Bot Framework

我正在創建一個PromptDialog Choice,它將填充存儲在數據庫中的對象選項列表。 但是,它僅顯示對象的類型,而不顯示選項的名稱。 誰能建議我從數據庫加載Option並將其與PromptDialog綁定的最佳方法? 這是我嘗試過的:

private void ShowOptions(IDialogContext context)
{
    List<Option> ListOptions = Option.CreateListOption();
    PromptDialog.Choice(context, this.OnOptionSelected, ListOptions, "Are you looking for a flight or a hotel?", "Not a valid option", 3);
}
private async Task OnOptionSelected(IDialogContext context, IAwaitable<Option> result)
{
    try
    {

        Option optionSelected = await result;

        switch (optionSelected.Text )
        {
            case "A":
                context.Call(new RootDialog(), this.ResumeAfterChoose);
                break;
            default: { context.Wait(MessageReceiveAsync); break; }
        }
    }
    catch (TooManyAttemptsException ex)
    {
        await context.PostAsync($"Ooops! Too many attemps :(. But don't worry, I'm handling that exception and you can try again!");

        context.Wait(this.MessageReceiveAsync);
    }
}

這是

  [Serializable]

public class Option
{
    public int ID { get; set; }
    public string Text { get; set; }
    public Option()
    {
        ID = 0;
        Text = "";
    }
    public static List<Option> CreateListOption()
    {
        List<Option> list = new List<Option>();
        Option A = new Option();
        A.ID = 1;
        A.Text = "A";
        Option B = new Option();
        B.ID = 2;
        B.Text = "B";
        list.Add(A);
        list.Add(B);
        return list;
    }
}

這是我得到的結果:

在此處輸入圖片說明

Choice靜態方法還包含一個Descriptions參數。 您可以嘗試以下方法:

  • 對於選項,發送包含選項ID的List<int>
  • 有關說明,請發送選項文本。

如Ezequiel所述,您可以提供Descriptions參數,例如:

    PromptDialog.Choice(context, this.OnOptionSelected, 
          ListOptions.Select(l=>l.ID).ToArray(),
          "Are you looking for a flight or a hotel?", "Not a valid option", 3,
         descriptions: ListOptions.Select(l=>l.Text).ToArray() );

然后將您的OnOptionSelected更改為:

    private async Task OnOptionSelected(IDialogContext context, IAwaitable<int> result)
    {
        try
        {

            int optionSelected = await result;
            var foundOption = Option.CreateListOption().First(o => o.ID == optionSelected);
//do more with foundOption
            switch (optionSelected)
            {
                case 1:
                    context.Call(new RootDialog(), this.ResumeAfterChoose);
                    break;
                default: { context.Wait(MessageReceivedAsync); break; }
            }
        }
        catch (TooManyAttemptsException ex)
        {
            await context.PostAsync($"Ooops! Too many attemps :(. But don't worry, I'm handling that exception and you can try again!");

            context.Wait(this.MessageReceivedAsync);
        }
    }

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM