Microsoft Bot框架如何在表单流中验证日期?

时间:2018-04-20 07:05:50

标签: c# botframework

我正在研究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

1 个答案:

答案 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;
 })

另请考虑将您的checkoutcheckin字段类型更改为DateTime,以便捕获日期输入的任何类型的变体。但是如果你完全按照你指定的模式需要它,那就保持原样。

另请查看Basic features of form flowAdvanced features of form flow,这有助于您熟悉表单流的概念