FluentHtml.Validation
Validation components for FluentHtml.
Installation
dotnet add package FluentHtml.Validation
Key Features
ValidationMessage
Display validation errors for a specific property:
model.ValidationMessage(x => x.Name)
This renders a <span> with the validation error message if the property is invalid.
ValidationSummary
Display all validation errors:
modelState.ValidationSummary("Validation Errors")
CSS Class Helpers
Check validation state:
model.HasError(x => x.Name, modelState)
// Returns true/false
var cssClass = model.ValidationCssClass(x => x.Name, modelState);
// Returns "is-valid" or "is-invalid"
Validate Extension
Validate a model using DataAnnotations attributes without ModelStateDictionary:
using FluentHtml.Validation;
public class CreateUserModel
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Invalid email")]
public string Email { get; set; }
}
// In your handler:
var validation = model.Validate();
if (!validation.IsValid)
return CreateForm(validation.Errors[0]).HxSwapOob("outerHTML:#create-form");
Complete Example with HTMX
using FluentHtml.Validation;
public class CustomerCreateModel
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; } = "";
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Invalid email format")]
public string Email { get; set; } = "";
public string? Phone { get; set; }
}
public static Node CreateCustomer(CustomerCreateModel model)
{
var validation = model.Validate();
if (!validation.IsValid)
return CreateForm(validation.Errors[0])
.HxSwapOob("outerHTML:#create-form");
// Process valid model...
return RenderCustomerRow(customer);
}
DataAnnotations Support
FluentHtml.Validation works with standard ASP.NET Core DataAnnotations:
public class UserModel
{
[Required(ErrorMessage = "Name is required")]
[StringLength(50)]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Range(18, 120)]
public int Age { get; set; }
}