繁体   English   中英

如何使验证注释可选? Asp.net核心

[英]How to make validation annotation optional? Asp.net Core

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

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

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

所以我可以以某种方式将值传递给 model 以确定参数是真还是假

您可以选择设置自定义 model 验证来完成它,这是官方链接

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

验证 class:

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;
        }
}

Controller:

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

Model:

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"); }
}

结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM