我在Bot框架应用程序中有以下代码。 您可以在下面的代码中看到我已经评论过ValidateStartDate委托,其背后的原因是,如果我在表单流中包含委托,那么在委托执行代码之后直接跳转到“context.Call(Booking,BookingComplete)”的BookingComplete委托;即会话结束。但理想情况下,它应该从表单构建器执行其余的字段。 请注意,这里StartDate的类型为String,我手动验证日期部分。此外,代码执行期间没有发生可见异常
public static IForm<ConferenceBooking> BuildForm()
{
return new FormBuilder<ConferenceBooking>().Message("Tell me meeting details!")
.Field(nameof(title))
.Field(nameof(StartDate))//, validate: ValidateStartDate
.Field(nameof(EntryTime), validate:ValidateCallTime)
.Build();
}
以下是StartDate的委托部分
private static Task<ValidateResult> ValidateStartDate(ConferenceBooking state, object response)
{
var result = new ValidateResult();
DateTime startDt = Convert.ToDateTime(GetDate(Convert.ToString(response)));
if (startDt == null || startDt == DateTime.MinValue)
{
result.IsValid = false;
result.Feedback = "I could not understand this format.";
}
else if (startDt.Date < DateTime.Now.Date)
{
result.IsValid = false;
result.Feedback = "Sorry, back dated bookings are not allowed";
}
else
{
result.IsValid = true;
result.Value = startDt;
}
return Task.FromResult(result);
}
答案 0 :(得分:0)
之前我也注意到了这种行为,这总是由于异常。 FormBuilder似乎捕获所有异常并退出catch块中的表单。这就是为什么你没有看到弹出任何异常的原因。尝试逐步检查代码或从表单外部执行代码。