【问题标题】:Use RequiredAttribute to make class property/class required使用RequiredAttribute 使类属性/类成为必需
【发布时间】:2018-11-09 12:58:02
【问题描述】:

我的问题类似于this 一个。

class WorkFlowData
{
      [Required]
      public InputData Data{ get; set; }

      public String Whatever { get; set; }
}

class GenericWorkFlowData
{
      public InputData Data{ get; set; }

      public String Whatever { get; set; }
}

class InputData
{
      public int ObjectID { get; set; }

      public string Name { get; set; }
}

我想实现需要的属性 ObjectID。

但是,我想在类级别而不是属性级别使用RequiredAttribute。验证应考虑 InputData 类的 ObjectID 属性。

正如您在上面看到的,并不总是应该验证 ObjectID 或根据需要设置它,这取决于调用的是哪个类 InputData,是否应该进行验证。

【问题讨论】:

  • 你不需要像 int 这样的内置类型。此类型不可为空。
  • 这些类将用于 jquery 不显眼的验证。例如,用户可能正在使用应定义 objectID 的 WorkFlowData,或者用户可能正在使用不应定义的 GenericWorkFlowData。
  • ObjectId 默认是必需的。我不确定 required 是否可以在课堂级别使用。但是,您可以根据需要创建自定义属性。
  • 如果您使用验证,则 Jquery 不显眼由 'data-' 调用,因此不需要做太多,但即使在这里,如果您想要某种自定义也可以完成。
  • 是的,我好像不能在课堂上使用。我只是想知道是否有人以前可以做过类似的事情并有提示。谢谢。

标签: c# .net validation data-annotations


【解决方案1】:

如果您需要编程验证,请实现 IValidatableObject。

 public class Blog : IValidatableObject
 {
     public int Id { get; set; }
     [Required]
     public string Title { get; set; }
     public string BloggerName { get; set; }
     public DateTime DateCreated { get; set; }
     public virtual ICollection<Post> Posts { get; set; }

     public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
     {
         if (Title == BloggerName)
         {
             yield return new ValidationResult
              ("Blog Title cannot match Blogger Name", new[] { "Title", “BloggerName” });
         }
     }
 }

来自 MSDN 的代码:https://docs.microsoft.com/en-us/ef/ef6/saving/validation

【讨论】:

    猜你喜欢
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多