微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据条件要求填充实体属性 - ASP NET Core MVC 和实体框架

如何解决如何根据条件要求填充实体属性 - ASP NET Core MVC 和实体框架

仅当 Item2 = "yes" 时,我才希望 Item.code 是强制性的。 InputModel 用于 Register 处的 Register.cshtml.cs

public class Item
{
  [required]
   public string Id{ get; set; }
  [required]
   public string desc{ get; set; }
  [required]
   public string code{ get; set; }
}

public class Item2
{
  [required]
    public string Id{ get; set; }
  [required]
    public string slug{ get; set; }
}


public class InputModel
{
  [required]
    public string Email { get; set; }

  [required]
    public string Password{ get; set; }

  [required]
    public Item Item { get; set; }

   public Item2 Item2 { get; set; }
}

我打算做这样的事情,IN InputModel

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
            {
                if (Item.code=="yes")
                {
                    ===> set Item2 required
                }
            }

这就是逻辑,有人能帮忙吗?

解决方法

我建议您尝试使用评论中提到的 FluentValidation。花点时间研究它真的很值得。假设您已经下载了它并想要实现您的验证。

public class InputModel
{
    public string Email { get; set; }

    public string Password{ get; set; }

    public Item Item { get; set; }

    public Item2 Item2 { get; set; }
}



public class InputModelValidator
    : AbstractValidator<InputModel>
{
    public InputModelValidator() 
    {
        RuleFor(request => request.Item2)
        .NotNull()
        .When(request =>
              request.Item != null
              && !string.IsNullOrEmpty(request.Item.Code)
              && request.Item.Code == "yes")
        .WithMessage("Item2 is mandatory if Item.code == 'yes'");
    }
 }

尽管如此,仍有许多不同的方法,但我在我的项目中使用了 FluentValidation。

,

首先,在 Item2 类中,删除 [Required] 属性。然后,在 InputModel 中,您可以实现 IValidatableObject,然后验证这些值。代码如下:

    public class Item
    {
        [Required]
        public string Id { get; set; }
        [Required]
        public string desc { get; set; }
        [Required]
        public string code { get; set; }
    }

    public class Item2
    { 
        public string Id { get; set; } 
        public string slug { get; set; }
    }

    public class InputModel: IValidatableObject
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100,ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.",MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password",ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
        [Required]
        public Item Item { get; set; }

        public Item2 Item2 { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (Item.code.ToLower() == "yes")
            {
                if(Item2.Id==null)
                    yield return new ValidationResult($"Item2 ID is required!",new[] { "Item2.Id" });
                
                if (Item2.slug == null) 
                    yield return new ValidationResult($"Item2 slug is required!",new[] { "Item2.slug" }); 
            }
        }
    }

截图如下:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?