【问题标题】:Is it possible to validate the formula in Ciloci.Flee without values是否可以在没有值的情况下验证 Ciloci.Flee 中的公式
【发布时间】:2018-08-10 13:37:16
【问题描述】:

我有一个 ASP.net (C#) 应用程序 (.net 3.5) 使用 Muhammet Parlak 的 Ciloci.Flee(特别是 Alan Dean 通过 NuGet 的 Trove.Flee),它允许用户在界面中输入公式,并且公式稍后用于根据一组不同用户收集的输入值进行计算。该公式包括他们必须从中提取的多达 9 个可能的变量。例如,他们可以定义Tt-((Lt/Vc)*(Th-Vi))。该应用程序知道如何填充所有这些变量,但我想做的是在它们在管理屏幕上输入公式时保护它们免受语法错误甚至不受支持的变量的影响。 Tt-((Lt/Vc)*(Th-Vi))+Aa 在输入公式时应该会导致验证错误,因为 Aa 不是受支持的变量。

在输入公式时,我没有实际值来尝试评估它。我一直无法找到一种方法来告诉上下文哪些变量是可以的,然后让它告诉我它在语法上是否正确。

PS - 当格式正确且不包含无效变量时,公式的实际评估确实可以正常工作。这只是我试图确定的用户的验证部分。

如果有人有这方面的经验并且可以分享他们的发现,我将不胜感激 :-) 谢谢!

【问题讨论】:

    标签: validation formula flee


    【解决方案1】:

    目前,我正在通过捕获异常来实现我想要的结果。此代码位于 ASP CustomValidator 控件中:

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
            {
                try
                {
                    ExpressionContext context = new ExpressionContext();
                    context.Imports.AddType(typeof(Math));
                    context.Variables["A"] = 1;
                    context.Variables["Ll"] = 1;
                    context.Variables["Lt"] = 1;
                    context.Variables["Lh"] = 1;
                    context.Variables["Th"] = 1;
                    context.Variables["Tgi"] = 1;
                    context.Variables["Tt"] = 1;
                    context.Variables["Vi"] = 1;
                    context.Variables["Vc"] = 1;
    
                    IGenericExpression<double> eGeneric = context.CompileGeneric<double>(args.Value);
                    args.IsValid = true;
                } catch (ExpressionCompileException ece)
                {
                    args.IsValid = false;
                }    
            }
    

    如果公式语法错误或变量无效,则会引发 ExpressionCompileException 异常并使控件无效。如果公式包含有效变量,则不会引发异常。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      相关资源
      最近更新 更多