首页 > 解决方案 > 如何验证 AdaptiveCard 输入控件?

问题描述

我在我的微软聊天机器人中使用 AdaptiveCard 输入表单来获取用户信息。有什么方法可以验证 TextInput 吗?像 asp.net 字段验证器?或 c# 中的任何属性,通过它我可以验证 AdaptiveCard 的所有类型的 TextInput。

var card = new AdaptiveCard()
{
    Body = new List<CardElement>()
    { 
       new TextBlock() { Text = "Email" },
       new TextInput()
       {
           Id = "Email",
           Placeholder = "Enter your email",
           Style = TextInputStyle.Email,
           IsRequired = true
       },


       new TextBlock() { Text = "Mobile" },
       new TextInput()
       {
           Id = "Mobile",
           Placeholder = "+(country code)(Your Phone Number)",
           Style = TextInputStyle.Tel,
           IsRequired = true
       },
    },

    Actions = new List<ActionBase>()
    {
       new SubmitAction()
       {
           Title = "Submit"
       }

   }
};
Attachment attachment = new Attachment()
{
    ContentType = AdaptiveCard.ContentType,
    Content = card
};

从自适应卡MessageReceivedAsync中获取数据

protected async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
    var message = await result;

    PersonalInfo userinfo = new PersonalInfo();
    if (message.Value != null)
    {
        // Got an Action Submit
        dynamic formvalue = message.Value;

        if (formvalue != null)
        {

            userinfo.Email = GetValue((JObject)formvalue, "Email");
            userinfo.Phone = GetValue((JObject)formvalue, "Mobile");

            var error = GetErrorMessage(userinfo); // Validation

            IMessageActivity replyMessage = context.MakeMessage();

            if (!string.IsNullOrEmpty(error))
            {
                replyMessage.Text = error;
                await context.PostAsync(replyMessage);
            }
            else
            {
                // Save Information in service bus
                if (sbConnectionString != "" && queueName != "")
                    await MainAsync(sbConnectionString, queueName, userinfo);

                replyMessage.Text = "Thank you for taking the time! \n We've submitted your query and an agent will get back to you soon. \n\n Have a great day!";
                await context.PostAsync(replyMessage);
                context.Done(true);
            }

        }
    }
}

// For Validating the Adaptive Card **GetErrorMessage** function pass userinfo

GetErrorMessage(PersonalInfo personalInfo){

    if (string.IsNullOrWhiteSpace(personalInfo.Email)
        || string.IsNullOrWhiteSpace(personalInfo.Phone))
        return "Please fill out all the fields";

    return string.Empty;

}

标签: c#botframeworkchatbotadaptive-cards

解决方案


isRequiredAdaptive Card 架构中的字段已弃用。您可以在此处查看当前架构。

您正在使用的 NuGet 包也已弃用,如您在此处看到的。请改用这个

Adaptive Card 架构不支持客户端验证。如果您想要客户端验证,那么您将不得不编写自己的 Direct Line 客户端,可能通过分叉Web Chat存储库。


推荐阅读