1

在 AnnotatedSandwichBot 示例之后,可以使用以下方式处理表单填充取消:

    private static IDialog<object> MakeRootDialog()
    {
        return Chain.From(() => FormDialog.FromForm(Form.BuilLocalizedForm))
            .Do(async (context, state) =>
            {
                try
                {
                    var completed = await state;
                }
                catch (FormCanceledException canceled)
                {
                    if (canceled.InnerException == null)
                        await context.PostAsync($"You quit on {canceled.Last}");
                    else
                        await context.PostAsync($"Sorry, I have a problem here");
                }
            });

当用户突然键入“再见”时,机器人会成功说You quit on FieldName(以及随后在机器人模拟器上出现 FormCanceledException 的巨大堆栈跟踪)。

但是,如果我只是再说一遍,它将从开头开始表单,而不是从最后完成的步骤开始。我怎样才能使表格从那里开始 - 理想情况下打印“欢迎回来!”之类的东西?

4

1 回答 1

1

你应该抓住一个FormCanceledException<T>where T 是你的表单模型。完成此操作后,您应该能够访问异常的LastForm属性,当用户退出时,您将在其中找到部分表单。

然后,您可以使用该部分表单作为表单的初始状态(请参阅相关问题)。

于 2016-11-09T15:58:01.643 回答