IValidatableObject
ASP.NET MVC 的條件驗證功能可讓您定義依賴其他模型屬性的驗證規則。 當某些欄位僅在特定情況下需要驗證時,這是非常寶貴的。
讓我們用一個包含 Person
、Name
的 IsSenior
模型和一個帶有 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中文網其他相關文章!