Manage localized validation (DataAnnotation attribute) and fluent validation on property value. provide Blazor <BeSwarm.Validator.BlazorValidator> for EditForm
$ dotnet add package BeSwarm.ValidatorPerform recursive localized DataAnnotations Attribute validation on your models and fluent validations.
Provide BlazorValidator for Blazor apps.
public class Model
{
[Required]
[MaxLength(6)]
public string Name { get; set; }
}
class Program
{
public static async Task Main(string[] args)
{
Model t= new();
ValidateContext context = new ValidateContext(false);
var listvalidationfailure = await Validate.ValidateObject(t, context);
foreach (var item in listvalidationfailure)
{
Console.WriteLine($"*** error **** Field: {item.PropertyName} value={item.Obj} attribute:{item.AttributeType} message:{item.ErrorMessage}");
}
t.Name = "11";
listvalidationfailure = await Validate.ValidateObject(t, context);
foreach (var item in listvalidationfailure)
{
Console.WriteLine($"*** error **** Field: {item.PropertyName} value={item.Obj} attribute:{item.AttributeType} message:{item.ErrorMessage}");
}
t.Name = "LPLOKUAAA";
listvalidationfailure = await Validate.ValidateObject(t, context);
foreach (var item in listvalidationfailure)
{
Console.WriteLine($"*** error **** Field: {item.PropertyName} value={item.Obj} attribute:{item.AttributeType} message:{item.ErrorMessage}");
}
Console.ReadKey();
}
}
Get attribute on property if exist
ex: check if [Required] is present on a property
RequiredAttribute? ra=Validate.GetAttributeIfExist<RequiredAttribute>(t, nameof(t.Name));
<EditForm Model="@_model" OnValidSubmit="@SubmitValidForm">
<BeSwarm.Validator.BlazorValidator @ref="_BlazorValidationValidator" ValidateContext="mycontext" />
Create au fluent class
public class FluentValidatorModel : AbstractValidator<Model>
{
public FluentValidatorModel()
{
RuleFor(x => x.Name).NotEmpty().WithMessage("controlled by fluent: not empty");
}
}
// add fluent validator
FluentValidatorModel fv = new();
context.FluentValidator = fv;
listvalidationfailure = await Validate.ValidateObject(t, context);
foreach (var item in listvalidationfailure)
{
Console.WriteLine($"*** error **** Field: {item.PropertyName} value={item.Obj} attribute:{item.AttributeType} message:{item.ErrorMessage}");
}
you can also add a Fluent validation strategy
public class FluentValidatorModel : AbstractValidator<Model>
{
public FluentValidatorModel()
{
RuleSet("FilterName", () =>
{
RuleFor(x => x.Name).NotEmpty().WithMessage("controlled by fluent: not empty");
});
}
}
Action<ValidationStrategy<object>> strategy = new(options => options.IncludeRuleSets("FilterName"));
context.FluentStrategy = strategy;
Be Swarm https://beswarm.fr/developpeur_en/
thierry roustan
MIT