【问题标题】:Disable some [Required] field validators in a view在视图中禁用某些 [Required] 字段验证器
【发布时间】:2016-04-16 14:11:27
【问题描述】:

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

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

Web 上的大多数信息看起来都来自 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>

【问题讨论】:

  • 如何生成对应的输入?请记住,使用新的“asp-for”标签助手,例如&lt;input asp-for=""/&gt; 也会自动生成验证范围,并将 data-require 属性附加到输入。
  • 添加了其余对应的代码

标签: asp.net asp.net-mvc validation data-annotations asp.net-core-mvc


【解决方案1】:

如果PromoImage 属性被标记为[Required] 属性,&lt;input asp-for="Files.PromoImage"/&gt; 将生成验证范围和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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多