[英]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
參數。 您可以嘗試以下方法:
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.