How to stop formflow dialog from re-prompting user when validation fails?

眉间皱痕 提交于 2019-12-24 10:48:21

问题


I have a formflow dialog in which one of it's properties is this...

[Describe("Car Mileage")]
[Prompt("Cool! What's the mileage of the car?")]
[Template(TemplateUsage.NotUnderstood, "Sorry, I didn't understand that mileage value. Can you enter it again please?")]
public string Mileage { get; set; }

Ignore the [Template(TemplateUsage.NotUnderstood,... for now, I'll come back to that.

The dialog is built using the following...

var form = builder
    .Field(new FieldReflector<CarValuationDialog>(nameof(ValuationOption))
        .SetPrompt(new PromptAttribute($"Hi.<br /><br />Are you looking to get a value for a car you're selling, or car you're buying? {{||}}")))
    .Field(new FieldReflector<CarValuationDialog>(nameof(RegistrationNumber))
        .SetDefine(RegistrationNumberDefinitionMethod))
    .Field(new FieldReflector<CarValuationDialog>(nameof(Mileage))
        .SetValidate(async (state, value) =>
            {
                var result = new ValidateResult { IsValid = true, Value = value };

                var regex = new Regex("[0-9,]+");
                var match = regex.Match((string)value);

                if (match.Success)
                {
                    result.IsValid = true;
                }
                else
                {
                    result.Feedback = "Sorry, I didn't understand that.";
                    result.IsValid = false;
                }

                return await Task.FromResult(result);
            }))
    .Field(
        nameof(PreviousOwnerOption),
        active: carValuationDialog => carValuationDialog.ValuationOption == ValuationOptions.LookingToSell)
    .Field(
        nameof(ServiceHistoryOption),
        active: carValuationDialog => carValuationDialog.ValuationOption == ValuationOptions.LookingToSell)
    .Confirm(Confirmation)
    .OnCompletion(GetValuationAndDisplaySummaryToUser);

return form.Build();

This question is related to

`Feedback` text not shown in bot conversation

I'm experimenting with the validation for Mileage, as I've changed that property from int to string in order to allow freeflow text e.g. "23,456 miles". As a side-effect of changing the data type, when the validation for Mileage fails, I get the following...

Not only does the result.Feedback value now get shown to the user (it did not before, when Mileage was an int), which is fine, but also the original question text is shown.

So my main question is - what can I do so that when validation fails, the original question prompt is not shown to the user?

As a side note, when changing Mileage back to int, and the validation fails (result.IsValid = false), result.Feedback is not shown, but [Template(TemplateUsage.NotUndderstood.... is now shown. So it seems the type of the property matters in relation to what validation messages are shown.

来源:https://stackoverflow.com/questions/51169968/how-to-stop-formflow-dialog-from-re-prompting-user-when-validation-fails

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!