c# - PromptDialog Choice with List 对象 Bot Framework

标签 c# asp.net .net asp.net-web-api botframework

我正在创建一个 PromptDialog Choice,它填充我存储在数据库中的对象选项列表。但是,它只显示对象的类型而不是选项的名称。谁能建议我从数据库加载选项并将其与 PromptDialog 绑定(bind)的最佳方法? 这是我尝试过的:

    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;
    }
}

这是我得到的结果: Bot Emulator test result

最佳答案

重写 Option 对象的 ToString() 方法可以解决这个问题。

如果您不提供 PromptStyle 作为参数,Microsoft botframework 默认使用 PromptStyle.Auto 打印选项。所以 botframework 根据 channel 选择样式。对于模拟器,它似乎是文本,因此它会尝试将选项打印为字符串。

关于c# - PromptDialog Choice with List 对象 Bot Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42621534/

相关文章:

c# - 使用 Json.net 反序列化混合类型列表

c# - Linq To 实体查询返回错误数据(不同于 Management Studio 查询)

python - 尝试抓取蜘蛛时出现错误(NotImplementedError)

.net - LINQ GroupBy 对象还是仅匿名类型?

c# - object global 是否为 null?

c# - 带有可选部分的正则表达式不会创建反向引用

c# - 在 .NET 控制台应用程序中监听按键

C# - 使用完全输入的字符创建字符串

asp.net - 响应式 CSS 更改在浏览器调整大小时不更新

asp.net - web.config 文件设置是否会覆盖 IIS 设置?