在视图中禁用一些 [Required] 字段验证器

Disable some [Required] field validators in a view

ASP.NET MVC Core 如果这有什么不同的话

是否有一种简单的方法可以在某些情况下禁用模型或视图中的某些字段验证器?

网络上的大多数信息看起来都来自 ASP.NET Forms 时代。 我找不到太多可以尝试的东西,但这看起来行不通。

<label asp-for="Files.PromoImage" class="col-md-2 control-label"></label>
<div class="col-md-10">
    <input asp-for="Files.PromoImage" class="form-control" />
    @if (Model.Content.NewArticle)
    {
        <span asp-validation-for="Files.PromoImage" class="text-danger"></span>
    }
</div>
<div class="col-md-8">
    <div asp-validation-summary="ValidationSummary.All" class="text-danger"></div>
</div>
如果 PromoImage 属性 标记有 [Required] 属性,

<input asp-for="Files.PromoImage"/> 将生成验证范围和 data-required 属性。可以在浏览器查看生成的html

实现您想要的效果的最简单方法是删除模型中的 [Required] 属性并在视图中添加如下内容:

@if (Model.Content.NewArticle)
{
    <input class="form-control" data-val="true" 
        data-val-required="The PromoImage field is required." name="Files.PromoImage" 
        placeholder="Promo Image" type="text" value="">        
}
else
{
    <input asp-for="Files.PromoImage" class="form-control"/>
}

然后再次在服务器上,在您的 post 操作方法中,您必须对 PromoImage 属性.

进行手动验证

不是那么琐碎但更优雅的方法是使用您自己的验证属性和 jQuery 验证器扩展 MVC 和 jQuery 验证,例如[RequiredIf]。 API 在 ASP.NET Core 1.0 中略有不同,但这里有一个例子:Custom validation