MVC ValidationMessage для динамического количества десятичных знаков - PullRequest
0 голосов
/ 03 октября 2018

У меня есть требование обеспечить динамическое число десятичных разрядов на входе в учебник.Я видел примеры переполнения стека с использованием атрибутов свойств и регулярных выражений для принудительного применения заданного числа десятичных знаков.

Мое требование динамично.@ Html.TextBoxFor () генерируются динамически, и каждый из них связан со свойством, которое имеет свои собственные требования к десятичным знакам.Таким образом, если результат требует 3 десятичных знака, даже если результат равен 1, он должен быть введен как 1.000.Однако следующий результат может иметь 5 десятичных знаков, которые должны быть 1.00000.

Свойство

List<Result> results

Где Result *

public class Result{

public float NumericResult;

public int DecimalPlaceRequired;

}

Какой лучший способ реализовать эту динамическую проверку в MVC?

1 Ответ

0 голосов
/ 03 октября 2018

Вы можете попытаться написать атрибут проверки клиента, унаследованный от ValidationAttribute и override метода.

override ValidationResult IsValid(object value, ValidationContext validationContext)

Получение значения DecimalPlaceRequired из экземпляра validationContext.ObjectInstance.затем действителен 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;
    }
}

Добавить атрибут CutomerAuth к свойству NumericResult.

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

    public int DecimalPlaceRequired { get; set; }

}

Вот пример для вас

c # онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...