DataAnnotations
Integrate Validixty validation with ASP.NET Core model validation using DataAnnotations attributes.
What are DataAnnotations?
DataAnnotations in Validixty provide attribute-based validation that integrates seamlessly with ASP.NET Core's model validation system. Simply decorate your model properties with validation attributes, and Validixty handles the rest automatically.
Why Use DataAnnotations?
- Declarative: Define validation rules using attributes
- ASP.NET Integration: Works with MVC model binding and validation
- Clean Code: Separate validation logic from business logic
- Automatic Validation: No manual validation calls needed
Before Using Validixty
Without Validixty, DataAnnotations validation might require custom attributes:
using System.ComponentModel.DataAnnotations;
public class UserModel
{
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Invalid email format")]
public string Email { get; set; }
[Required(ErrorMessage = "Phone is required")]
[RegularExpression("^(\\+20|0)?1[0-2,5]\\d{8}$", ErrorMessage = "Invalid Egyptian phone number")]
public string PhoneNumber { get; set; }
[Required(ErrorMessage = "Credit card is required")]
[RegularExpression("^\\d{13,19}$", ErrorMessage = "Invalid credit card format")]
public string CreditCardNumber { get; set; }
[Required(ErrorMessage = "IBAN is required")]
[StringLength(34, MinimumLength = 15, ErrorMessage = "IBAN must be between 15-34 characters")]
public string IBAN { get; set; }
}
// Custom validation attribute
public class EgyptianPhoneAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null) return ValidationResult.Success;
var phone = value.ToString();
if (string.IsNullOrEmpty(phone)) return ValidationResult.Success;
var pattern = "^(\\+20|0)?1[0-2,5]\\d{8}$";
if (!Regex.IsMatch(phone, pattern))
{
return new ValidationResult("Invalid Egyptian phone number format");
}
return ValidationResult.Success;
}
}
After Using Validixty
With Validixty's DataAnnotations, validation becomes much simpler:
using Validixty.Annotations;
public class UserModel
{
[Phone(Country = CountriesEnum.Egypt)]
public string PhoneNumber { get; set; }
[NationalID(Country = CountriesEnum.SaudiArabia)]
public string NationalId { get; set; }
[CreditCard(Type = CardTypes.Visa)]
public string CreditCardNumber { get; set; }
[SmartValidate]
public string IBAN { get; set; }
}
How It Saves Time
- Eliminates custom attributes: Pre-built validation attributes
- Country-specific validation: Built-in international formats
- Automatic integration: Works with ASP.NET Core out of the box
- Consistent validation: Same rules across your application
Usage Examples
User Registration Model
using Validixty.Annotations;
public class RegisterViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Phone(Country = CountriesEnum.Egypt)]
public string PhoneNumber { get; set; }
[CreditCard]
public string CreditCardNumber { get; set; }
[Required]
[StringLength(100, MinimumLength = 8)]
public string Password { get; set; }
}
Controller Integration
public class AccountController : Controller
{
[HttpPost]
public IActionResult Register(RegisterViewModel model)
{
if (!ModelState.IsValid)
{
// Validation errors are automatically added to ModelState
return View(model);
}
// Model is valid, proceed with registration
return RedirectToAction("Success");
}
}
Payment Model
public class PaymentModel
{
[CreditCard(Type = CardTypes.MasterCard)]
public string CardNumber { get; set; }
[Required]
[Range(0.01, 10000.00)]
public decimal Amount { get; set; }
[StringLength(3, MinimumLength = 3)]
public string Currency { get; set; }
[SmartValidate] // Auto-detects IBAN format
public string BankAccount { get; set; }
}
Address Model
public class AddressModel
{
[Required]
[StringLength(200)]
public string StreetAddress { get; set; }
[Required]
[StringLength(100)]
public string City { get; set; }
[PostalCode(Country = CountriesEnum.Egypt)]
public string PostalCode { get; set; }
[Coordinates]
public string Latitude { get; set; }
[Coordinates]
public string Longitude { get; set; }
}
Document Upload Model
public class DocumentModel
{
[Required]
[StringLength(255)]
public string FileName { get; set; }
[FileExtension(AllowedExtensions = new[] { ".pdf", ".doc", ".docx" })]
public string Extension { get; set; }
[MimeType(AllowedTypes = new[] { "application/pdf", "application/msword" })]
public string ContentType { get; set; }
[Required]
public long FileSize { get; set; }
}