如何控制自适应卡上输入值的总和

How to control the sum of input values ​on an adaptivecard

我想控制让两个Input.Number输入的数字之和小于9。 比如你在0到9之间的时候在AInput.Number中输入5, B Input.Number 最多允许输入 4 个。 或者,如果Input.Choiceset中有一个0到9的值,如果我在A中select5,我需要能够自动select只有0~4。

下面是我的代码,没有按预期工作。

                card.Body.Add(new AdaptiveTextBlock() 
                {
                    HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                    Spacing = AdaptiveSpacing.None,
                    Size = AdaptiveTextSize.Small,
                    Weight = AdaptiveTextWeight.Bolder,
                    Color = AdaptiveTextColor.Accent,
                    Text = "A"
                });

                card.Body.Add(new AdaptiveNumberInput()
                {
                    Id = "AInput",
                    Spacing = AdaptiveSpacing.None,
                    Placeholder = "0",
                    Min = 0,
                    Max = maxNum - BNum
                });
                //I want to put the value that the user chooses into AResult.
                card.Body.Add(new AdaptiveTextBlock()
                {
                    HorizontalAlignment = AdaptiveHorizontalAlignment.Left,
                    Spacing = AdaptiveSpacing.None,
                    Size = AdaptiveTextSize.Small,
                    Weight = AdaptiveTextWeight.Bolder,
                    Color = AdaptiveTextColor.Accent,
                    Text = "B"
                });
                card.Body.Add(new AdaptiveNumberInput()
                {
                    Id = "BInput",
                    Spacing = AdaptiveSpacing.None,
                    Placeholder = "0",
                    Min = 0,
                    Max = maxNum - ANum
                });

如果你能帮助我,我将不胜感激。

如果你查看 InputNumber Schema,你可以看到关于 Min/Max:

我不确定哪些客户实际使用这些进行验证,但我猜大多数人不会。也有一个 feature request 用于此,但似乎没有太大的吸引力。

谢天谢地,您可以自己完成此操作。它只需要您做额外的工作。请记住,这并不容易。

1。使用 ActivityPrompt

但是,您会注意到,这目前是一个抽象 class,因此您不能直接使用它。你会想写你自己的 class 那 extends the abstract class.

2。写一个验证器

您必须自己进行验证,检查输入是否在 min/max 值范围内。如果没有,发送消息告诉用户出了什么问题,然后 re-prompt.

这是an example of how to validate in the next step

您还可以将验证器传递给 ActivityPrompt。这应该让你开始:

AddDialog(new MyActivityPrompt(nameof(TextPrompt), Validator));

[...]

private Task<bool> Validator(PromptValidatorContext<string> promptContext, CancellationToken cancellationToken)
{
    return Task.FromResult(true);
}

真正的诀窍是将您的 min/max 设置从卡传递到验证器。

为此,您需要向 AdaptiveCard.Action.Submit.data 添加额外的数据。你可以这样做:

var card = new AdaptiveCard();
var action = new AdaptiveSubmitAction()
{
    Data = new {
        AInputMin = 0,
        AInputMax = 5,
    }
};
card.Actions.Add(action);

然后,当用户点击提交时,卡片 min/max 设置将与结果一起显示。

我还写了一个 AdaptiveCardPrompt 来为您做一些这样的事情,但它是在 TypeScript 中,而不是在 Bot Framework SDK 中。