如果值被模型绑定器绑定,则应用所需属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果值被模型绑定器绑定,则应用所需属性相关的知识,希望对你有一定的参考价值。

我必须处理以下验证场景。

  1. 如果某些条件被满足,我们就会显示文本框,这应该是强制性的
  2. 如果不符合要求,该属性的值应该是可选的。

模型看起来有点像这样。

public class Setting

    [Required]
    public string Domain  get; set; 

能否以某种方式区分字段值被省略或没有绑定的情况?因为据我所知,如果值被省略或没有绑定,它的值将是一个默认值(字符串)。在这种情况下,我无法确定是否应该提供域。

答案

如果你有可能需要或不需要的情况,你最好的选择可能是让你的 Setting 继承 IValidatableObject 并实施自己的 Validate() 方法。做任何你需要的检查,看看是否需要,然后做一个 yield return new ValidationResult("Description", new[] nameof(Domain ) ) 来解释为什么它是无效的。

如果你不能在你的内心做出这样的判断 Settings 类,那么你可能需要在你的控制器动作中进行,并使用类似于 ModelState.AddModelError("Description", nameof(model.Domain))); 继而检查 ModelState.IsValid 来查看是否应该踢出动作并返回一个重定向视图。

以上是关于如果值被模型绑定器绑定,则应用所需属性的主要内容,如果未能解决你的问题,请参考以下文章

将自定义模型绑定器应用于 asp.net 核心中的对象属性

为啥 ASP.Net MVC 模型绑定器将空 JSON 数组绑定到 null?

属性的自定义配置绑定器

Asp.Net Core Razor Page PUT Handler 模型绑定器未绑定来自 ajax put 上的 java 脚本的序列化表单

Web API 验证不使用自定义模型绑定器触发

自定义模型绑定器未针对 ASP.NET Core 2 中的单个属性触发