代码之家  ›  专栏  ›  技术社区  ›  Jason Evans

在SetValidate调用中设置对话框属性值无效

  •  0
  • Jason Evans  · 技术社区  · 6 年前

    给定以下formflow设置。。。

    return builder
        .Field(new FieldReflector<CarValuationDialog>(nameof(Mileage))
            .SetValidate(async (state, value) =>
                {
                    var result = new ValidateResult { IsValid = true };
    
                    if (int.TryParse(value.ToString(), out int mileage))
                    {
                        state.Mileage = mileage;
                        result.IsValid = true;
                    }
                    else
                    {
                        result.Feedback = "That isn't valid number. Can you enter it again please?";
                        result.IsValid = false;
                    }
    
                    return result;
                }))
    
        .Field(new FieldReflector<CarValuationDialog>(nameof(HappyWithAnswersBuying))
            .SetActive(carValuationDialog => carValuationDialog.ValuationOption == ValuationOptions.LookingToOwn)
            .SetPrompt(CreateHappyWithAnswersBuyingPrompt())
            .SetDefine(HappyWithAnswersDefinitionMethod))
        .OnCompletion(GetValuationAndDisplaySummaryToUser)
        .Build();
    

    我想对用户给出的里程回答进行自定义验证。密码 SetValidate 执行,并给定一个有效整数,将该数字分配给 state.Mileage .

    但是,当显示询问用户是否满意答案的提示时,里程仍然设置为0。。

    enter image description here

    下面是提示的代码。。

    private static PromptAttribute CreateHappyWithAnswersBuyingPrompt()
    {
        StringBuilder sb = new StringBuilder(100);
    
        sb.Append("Are you happy with your answers? <br /><br />");
        sb.Append("{&RegistrationNumber}: {RegistrationNumber} <br />");
        sb.Append("{&Mileage}: {Mileage:N0} miles {||}");
    
        return new PromptAttribute(sb.ToString())
        {
            ChoiceStyle = ChoiceStyleOptions.Buttons,
            FieldCase = CaseNormalization.InitialUpper
        };
    }
    

    在我添加 设置验证 代码,里程在提示中显示得非常好。但由于我现在手动设置 状态里程 ,因为某种原因,它没有被持久化。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jason Evans    6 年前

    伙计,我真的需要检查一下我的代码。。。

    基本上,我没有设定目标 Value 财产 ValidateResult 例子

    .SetValidate(async (state, value) =>
    {
        var result = new ValidateResult { IsValid = true, Value = value };
    
        ....
    }
    

    完成此操作后,里程值现在显示在提示中。。。

    enter image description here