【发布时间】:2017-03-06 09:08:53
【问题描述】:
我正在创建一个 PromptDialog Choice 来填充我存储在数据库中的对象选项列表。但是,它只显示对象的类型而不是选项的名称。谁能建议我从数据库加载选项并将其与 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;
}
}
【问题讨论】:
-
您是否尝试过 Khushi4.net 在此线程中建议的内容:stackoverflow.com/questions/38072037/… ?
-
我已经阅读了您之前提到的链接,但我的情况是我的列表是对象列表。它不是字符串列表或任何原始数据类型。
-
知道了,编辑帮了大忙。您是否简单地尝试过覆盖 Option 对象的 ToString()?
-
哇,瞧!那工作完美。非常感谢你。你拯救了我的想法。但它怎么能起作用呢?你能解释一下吗?
-
@Malte 您能否创建一个答案以清楚地显示解决方案,以便在每个人都像我一样处理它时为他们提供帮助?
标签: c# asp.net .net asp.net-web-api botframework