如何控制自适应卡上输入值的总和
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 中。
我想控制让两个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 中。