我正在使用示例“SandwichOrder”代码。当我使用属性“描述”来更改项目值时,机器人不理解设置的值。
public enum LengthOptions
{
[Describe("Test 1")]
SixInch = 1,
[Describe("Test 2")]
FootLong = 2
};
这是输出:
我正在使用示例“SandwichOrder”代码。当我使用属性“描述”来更改项目值时,机器人不理解设置的值。
public enum LengthOptions
{
[Describe("Test 1")]
SixInch = 1,
[Describe("Test 2")]
FootLong = 2
};
这是输出:
问题是用户选择后如何FormFlow
处理反馈,结果实际上是正确的类型LengthOptions
。由于我们无法修改 的源代码BotBuilder SDK
,这里有一个变通方法来解决这个问题:我们尝试覆盖该项目的反馈FormFlow
,这里是构建时的代码FormDialog
:
...
.Field(nameof(Length),
validate: async (state, response) =>
{
var result = new ValidateResult { IsValid = true, Value = response };
var value = (LengthOptions)response;
result.Feedback = "Your selection means " + value;
return result;
})
...
上面代码中的Length
属性可以这样定义:
public enum LengthOptions
{
[Describe("Test 1")]
SixInch = 1,
[Describe("Test 2")]
FootLong = 2
};
public LengthOptions? Length { get; set; }
这是测试结果:
@Grace Feng 提到的是一种方法。另一种更简单的方法是将Terms
装饰添加到LengthOptions
每个项目。
所以代码是:
public enum LengthOptions
{
[Terms(new string[] { "Test 1" })]
[Describe("Test 1")]
SixInch = 1,
[Terms(new string[] { "Test 2" })]
[Describe("Test 2")]
FootLong = 2
};
现在您的机器人将自动将“Test 1”的值理解为 SixInch,将“Test 2”的值理解为 FootLong