C# 动态小数位数的MVC ValidationMessage

C# 动态小数位数的MVC ValidationMessage,c#,.net,asp.net-mvc,razor,C#,.net,Asp.net Mvc,Razor,我有一个要求,在教科书输入上强制执行动态小数位数。我见过使用属性和正则表达式强制执行小数位数设置的堆栈溢出示例 我的需求是动态的@Html.TextBoxFor()是动态生成的,并且每一个都链接到一个具有自己的小数位数要求的属性。因此,如果结果需要3位小数,即使结果为1,也必须输入为1.000。但是,下一个结果可能需要5位小数,因此需要1.00000 财产是 List<Result> results 在MVC中实现此动态验证的最佳方法是什么?您可以尝试从ValidationAttr

我有一个要求,在教科书输入上强制执行动态小数位数。我见过使用属性和正则表达式强制执行小数位数设置的堆栈溢出示例

我的需求是动态的@Html.TextBoxFor()是动态生成的,并且每一个都链接到一个具有自己的小数位数要求的属性。因此,如果结果需要3位小数,即使结果为1,也必须输入为1.000。但是,下一个结果可能需要5位小数,因此需要1.00000

财产是

List<Result> results

在MVC中实现此动态验证的最佳方法是什么?

您可以尝试从
ValidationAttribute
override
方法中继承客户验证属性

override ValidationResult IsValid(object value, ValidationContext validationContext)
validationContext.ObjectInstance
实例获取
DecimalPlaceRequired
值。然后通过
Regex
生效

public class CutomerAuthAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {

        var model = validationContext.ObjectInstance as Result;
        if (model != null)
        {
            string pattern = GetPattern(model);

            if (Regex.IsMatch(value.ToString(), pattern))
            {
                return null;
            }
        }

        return new ValidationResult("Please input correct float number");
    }

    private string GetPattern(Result model)
    {
        string pattern = "^[+]?[0-9]+";

        if (model.DecimalPlaceRequired > 0)
            pattern += "[.][0-9]{" + model.DecimalPlaceRequired + "}";

        pattern += "$";

        return pattern;
    }
}
NumericResult
属性上添加
cutomeauth
属性

public class Result
{
    [CutomerAuth]
    public float NumericResult { get; set; }

    public int DecimalPlaceRequired { get; set; }

}
这是给你的样品


谢谢d-Shih,这很有效。我需要做些额外的事情来验证客户端吗?内置验证方法正确验证客户端,但使用此自定义方法时,表单仍会提交到服务器,即使我进行了调试,并且在使用错误的小数位时,可以看到表单验证失败。没关系,服务器端验证就足够了。谢谢你,伙计。
public class Result
{
    [CutomerAuth]
    public float NumericResult { get; set; }

    public int DecimalPlaceRequired { get; set; }

}