首頁 >後端開發 >C++ >如何使用資料註解和 IValidatableObject 在 ASP.NET MVC 中實現條件驗證?

如何使用資料註解和 IValidatableObject 在 ASP.NET MVC 中實現條件驗證?

Patricia Arquette
Patricia Arquette原創
2025-01-08 17:47:40459瀏覽

How to Implement Conditional Validation in ASP.NET MVC Using Data Annotations and IValidatableObject?

使用 ASP.NET MVC 資料註解和 IValidatableObject

實作條件驗證

ASP.NET MVC 的條件驗證功能可讓您定義依賴其他模型屬性的驗證規則。 當某些欄位僅在特定情況下需要驗證時,這是非常寶貴的。

條件驗證範例:實際場景

讓我們用一個包含 PersonNameIsSenior 模型和一個帶有 Senior 屬性的巢狀 Description 類別來進行說明。 只有當 Senior.Description 為 true 時,我們才需要 IsSenior

這是使用資料註解的模型(一種更簡單但不太靈活的方法):

<code class="language-csharp">public class Person
{
    [Required(ErrorMessage = "*")]
    public string Name { get; set; }

    public bool IsSenior { get; set; }

    public Senior Senior { get; set; }
}

public class Senior
{
    [Required(ErrorMessage = "*")]  // This validation is not conditionally applied yet.
    public string Description { get; set; }
}</code>

以及對應的視圖片段(說明性):

<code class="language-html">@Html.LabelFor(m => m.Name)
@Html.EditorFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)

@Html.LabelFor(m => m.IsSenior)
@Html.EditorFor(m => m.IsSenior)
@Html.ValidationMessageFor(m => m.IsSenior)

@Html.LabelFor(m => m.Senior.Description)
@Html.EditorFor(m => m.Senior.Description)
@Html.ValidationMessageFor(m => m.Senior.Description) </code>

使用 IValidatableObject

進行高階條件驗證

為了更強大的條件驗證,ASP.NET MVC 提供了 IValidatableObject 介面。 實作其 Validate 方法可讓您根據模型的整體狀態定義驗證邏輯。

這是使用 Person 改良的 IValidatableObject 模型:

<code class="language-csharp">public class Person : IValidatableObject
{
    public string Name { get; set; }
    public bool IsSenior { get; set; }
    public Senior Senior { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (IsSenior && string.IsNullOrEmpty(Senior?.Description))
            yield return new ValidationResult("Description is required for senior citizens.");
    }
}</code>

這種方法提供了更大的靈活性和對驗證規則的控制。 有關全面的詳細信息,請參閱相關的 Microsoft 文件(搜尋“IValidatableObject”和 ASP.NET MVC)。 上面的範例使用空條件運算子 (?.) 來增加安全性。

以上是如何使用資料註解和 IValidatableObject 在 ASP.NET MVC 中實現條件驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn