0

I am trying to handle customValidation, using class object ValidationAttribute to my Model class. I cant seem to achieve correctly and need some help to improve my logic. The logic i want here when leaving@Html.EditorFor(). Must validate error from model/custom-class. I debug it does not hit any of my controller. The form does saves well on db, need validation to work.

// Model
  [Required(ErrorMessage = "This field is required")]
 [CustomValidation(ErrorMessage = "This field is required")]
        public int CellNumber { get; set; }

// CustomValidation.cs
  public class CustomFormValidation:ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var registration = (RegistrationTrainingForm)validationContext.ObjectInstance;
            if(registration.CellNumber==null)
            {
                return new ValidationResult("This field is required");
            }
                
            return base.IsValid(value, validationContext);
        }
    }

// Controller

        //GET:TrainingRegForm/Create/WebRequest.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult SubmitRegDetails([Bind(Include= "Id, Title, FirstName, LastName, Position, Company, StreetAddress, StreetAddressLine, City, StateProvince, ZipCode,Email, CellNumber, DietaryRequirement")]TrainingRegForm eNtsaTraining)
        {
            if(ModelState.IsValid)
            {
                eNtsaTraining.Id = Guid.NewGuid();
                db.TrainingRegs.Add(eNtsaTraining);
                db.SaveChanges();
                return RedirectToAction("SaveRegForm");
            }

            // Validates when empty.
            if(ModelState.IsValid)
            {
                return RedirectToAction("SaveRegForm");
            }
            return View(eNtsaTraining);
        }


    
  • Does this answer your question? [Required attribute for an integer value](https://stackoverflow.com/questions/6662976/required-attribute-for-an-integer-value) – G_P Jun 29 '20 at 19:14
  • I see the attribute but don't see usage. – Guru Stron Jun 29 '20 at 19:15
  • Where do you use your attribute ? – Arsalan Valoojerdi Jun 29 '20 at 19:16
  • @Guru and Arsalan. Here is my Attribute but i dont think it works. public class CustomFormValidation:ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var registration = (RegistrationTrainingForm)validationContext.ObjectInstance; if(registration.CellNumber==null) { return new ValidationResult("This field is required"); } return base.IsValid(value, validationContext); } } – mailer testmail Jun 29 '20 at 19:18
  • @mailertestmail you have this code in question. Where do you use the `CustomFormValidation`? What field/class do you mark with it? – Guru Stron Jun 29 '20 at 19:22
  • @Guru i am using [CustomValidation(ErrorMessage = "This field is required")] – mailer testmail Jun 29 '20 at 19:25
  • 1
    i see cellNumber is int, your validation checks for null, but int default value is 0 – Nonik Jun 29 '20 at 19:28
  • @Nonik yes, would this be reason why my field does not validate on my Razor(View)@html.EditorFor(); when leaving the text? – mailer testmail Jun 29 '20 at 19:31
  • Yes, you either change to the type of nullable int or string – Nonik Jun 29 '20 at 19:33
  • I did change the data type, still its not working.@Guru the table definition is TrainingRegForm it has the table fields name made a change from the CustomValidation.cs. I still not getting it write. – mailer testmail Jun 29 '20 at 19:38

0 Answers0