首页 >后端开发 >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