簡體   English   中英

ASP.NET Core MVC參數化驗證,條件驗證或基於其父類的屬性驗證

[英]ASP.NET Core MVC parameterized validation, conditional validation or validation of a property based on its parent class

我的表單有兩個模型屬性,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;
    }
}

但是,我的“視圖/ 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的最大值/最小值,而忽略此最大值/最小值毫米的驗證?

非常感謝您的幫助

我們最終更新了模型(無法避免)。 我們已經為百分比創建了一個額外的屬性

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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM