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中文网其他相关文章!