Параметрированная валидация ASP.NET Core MVC, условная валидация или валидация свойства на основе его родительского класса - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть два свойства модели для моей формы, Max и Min, которые отвечают за любое значение Max или Min в моей форме, которое я проверяю, чтобы убедиться, что они являются десятичными и присутствуют, также я проверяю диапазон

    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    [MaxMinRange("Allowed range (0-100)")]
    public string Minimum { get; set; }
    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    [MaxMinRange("Allowed range (0-100)")]
    public string Maximum { get; set; }

Вот мой пользовательский валидатор для диапазона

public class MaxMinRangeAttribute : ValidationAttribute
{
    private String ErrorMessage { get; set; }

    public MaxMinRangeAttribute(String errormessage)
    {
        this.ErrorMessage = errormessage;
    }

    protected override ValidationResult IsValid(object value, ValidationContext context)
    {
        if (value != null)
        {
            double maxmin;
            bool isDouble = Double.TryParse(value.ToString(), out maxmin);

            if (isDouble && Convert.ToDouble(value.ToString()) > 100)
            {
                return new ValidationResult(ErrorMessage);
            }
        }

        return ValidationResult.Success;
    }
}

Однако свойства модели Max и Min на моей странице View / cshtml представлены различными родительскими классами, такими как процентное содержание химического состава или миллиметры

(процент химического состава)

    <td>
        <input type="text" class="form-control" asp-for="BIS232Request.JSONData.ChemicalComposition[20].Value.Minimum" />
        <span asp-validation-for="BIS232Request.JSONData.ChemicalComposition[20].Value.Minimum" class="alert-danger"></span>
   </td>
  <td>
     <input type="text" class="form-control" asp-for="BIS232Request.JSONData.ChemicalComposition[21].Value.Minimum" />
     <span asp-validation-for="BIS232Request.JSONData.ChemicalComposition[21].Value.Minimum" class="alert-danger"></span>
  </td>

миллиметры

  <td>
    <input type="text" class="form-control" asp-for="BIS232Request.JSONData.ProductDimensions[0].Value.Minimum" />
    <span asp-validation-for="BIS232Request.JSONData.ProductDimensions[0].Value.Minimum" class="alert-danger"></span>
    </td>
    <td>
     <input type="text" class="form-control" asp-for="BIS232Request.JSONData.ProductDimensions[1].Value.Minimum" />
     <span asp-validation-for="BIS232Request.JSONData.ProductDimensions[1].Value.Minimum" class="alert-danger"></span>
  </td>

Проценты, очевидно, не должны превышать 100; однако миллиметры могут быть

У меня вопрос, как я могу по-разному проверять одни и те же свойства модели на основе родительского класса, дополнительных свойств или, возможно, некоторых дополнительных параметров?

Как я могу проверить Макс / Мин для процентов, не превышающих 100, но не обращая внимания на эту проверку для Макс / Мин миллиметров?

Большое спасибо за помощь

1 Ответ

0 голосов
/ 14 ноября 2018

Мы закончили тем, что обновили нашу модель (не мог избежать этого). Мы должны были создать дополнительное свойство специально для процента

public class MaxMin
{
    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    public string Minimum { get; set; }
    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    public string Maximum { get; set; }
}

public class MaxMinPercentage
{
    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    [MaxMinRange("Allowed range (0-100)")]
    public string Minimum { get; set; }
    [Required]
    [RegularExpression("^\\d+(.\\d+){0,1}$", ErrorMessage = "Invalid Value")]
    [MaxMinRange("Allowed range (0-100)")]
    public string Maximum { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...