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

时间:2019-05-24 00:54:48

标签: c# botframework adaptive-cards

我想进行控制,以使在两个Input.Number中输入的数字之和小于9。 例如,如果您在0到9之间,则在A Input.Number中输入5。 B Input.Number最多可以输入4。 或者,如果Input.Choiceset中的值介于0到9之间,那么如果我在A中选择5,则我只能自动选择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
                });

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

1 个答案:

答案 0 :(得分:0)

如果您查看InputNumber Schema,则可以看到有关最小/最大的信息:

enter image description here

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

很高兴,您可以自己执行此操作。它只需要您付出额外的努力。请记住,这并不容易。

1。使用ActivityPrompt

但是,您会注意到,当前这是一个抽象类,因此您不能直接使用它。您将要编写自己的类extends the abstract class

2。编写验证器

您必须进行自己的验证,以检查输入是否在最小值/最大值之内。如果不是,请发送消息告诉用户出了什么问题,然后重新提示。

这里是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);
}

真正的窍门是从卡中将您的最小/最大设置传递给验证器。

为此,您需要向AdaptiveCard.Action.Submit.data添加其他数据。您可以执行以下操作:

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

然后,当用户单击提交时,卡的最小/最大设置将与结果一起显示。

我还写了一个AdaptiveCardPrompt,可以为您完成其中的一些操作,但是它在TypeScript中,还没有在Bot Framework SDK中。