我正在研究Microsoft bot框架,我正在开发对话形式流程。我要求用户输入2个日期。我希望在日期执行自定义验证逻辑,例如用户输入的当前日期应该大于用户输入的上一个日期。
以下是我对FormFlow的属性
[Prompt("Please enter checkin date")]
[Pattern(@"^\d{1,2}/\d{1,2}/\d{4}$")]
public string checkindate { get; set; }
[Prompt("Please enter checkin date")]
[Pattern(@"^\d{1,2}/\d{1,2}/\d{4}$")]
public string checkoutdate { get; set; }
我想验证checkoutdate应该大于checkindate。我如何在Bot框架中做到这一点。
请帮我解决你的建议。
谢谢, Ketan
答案 0 :(得分:1)
使用表单流中的checkout
函数验证BuildForm方法中的Validate
字段,该函数可用于验证字段。
.Field(nameof(checkoutdate),
validate: async (state, value) =>
{
var result = new ValidateResult { IsValid = true, Value = values };
//Here checkoutdate is present inside value
//Parse your date in string to Date object
DateTime checkindate = DateTime.Parse(state.checkindate);
DateTime checkoutdate = DateTime.Parse(value);
//If checkoutdate is less than checkin date then its invalid input
if (checkoutdate < checkindate)
{
result.IsValid = false;
result.Feedback = "Checkout date can't be less than checkin date";
}
return result;
})
另请考虑将您的checkout
和checkin
字段类型更改为DateTime
,以便捕获日期输入的任何类型的变体。但是如果你完全按照你指定的模式需要它,那就保持原样。
另请查看Basic features of form flow和Advanced features of form flow,这有助于您熟悉表单流的概念