【问题标题】:How to make validation annotation optional? Asp.net Core如何使验证注释可选? ASP.NET 核心
【发布时间】:2020-07-19 10:00:16
【问题描述】:

我需要构建一组自定义的验证注解,其中一些假设是对已经存在的注解的扩展,而另一些则假设是完全发明的。

所以,如果可能的话,请为我提供很好的资源来学习如何 [1] 扩展或/和 [2] 发明注释

基本上,我需要有关如何使 [Required] 注释可选的帮助?我需要将其扩展为像[Required(parameter)] 这样我可以以某种方式将值传递给模型以确定参数是真还是假。所以,我可以控制这次是否需要应用注释。

【问题讨论】:

  • 我认为标准的 [Required] 注释不允许这样的事情 - 但您始终可以编写自己的自定义数据注释以进行验证 - 参见例如this other SO question on the topic 作为起点 - 或者只是 Google 的“C# 编写自定义数据注释” - 你会得到很多链接

标签: c# asp.net-core


【解决方案1】:

所以我可以以某种方式将值传递给模型以确定参数为 真假

您可以选择设置自定义模型验证来完成它,这是官方link

以下是我的demo,希望对你有帮助。

验证类:

public class RequiredExAttribute : ValidationAttribute
    {
        public string IsFalse { get; set; }
        public string GetErrorMessage() => "Not this name";
        public RequiredExAttribute(string name)
        {
            IsFalse = name;
        }
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value.ToString() == IsFalse)
            {
                return new ValidationResult(GetErrorMessage());
            }
            else return ValidationResult.Success;
        }
}

控制器:

public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Index(JobApplication jobApplication)
        {
                return View();
        }

型号:

public class JobApplication 
    {
        [RequiredEx("Tsai")]
        public string Name { get; set; }      
    }

查看:

@model JobApplication
<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<form class="m-1 p-1" method="post">
    <div class="form-group">
        <label asp-for="Name"></label>
        <input asp-for="Name" type="text" class="form-control" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">Submit Application</button>
</form>

<style>
    .input-validation-error {
        border-color: red;
    }
</style>
@section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2019-08-05
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多