Skip to content

Fluent builder + conditions

Configure fields with a type-safe fluent API. The company fields below appear only when the account type is Business.

Live form
Create your account

Account type
View source
@page "/builder"

<BormView Definition="_schema" Model="_model" OnValidSubmit="HandleSubmit" SubmitText="Sign up" />

@code {
    private readonly AccountSignup _model = new();
    private BormDefinition _schema = default!;

    protected override void OnInitialized()
    {
        _schema = BormBuilder.For<AccountSignup>()
            .Title("Create your account")
            .Field(x => x.FullName, f => f.Required().MinLength(2).Placeholder("Ada Lovelace"))
            .Field(x => x.Email, f => f.Required().Email().Placeholder("[email protected]"))
            .Field(x => x.AccountKind, f => f.AsRadio().Label("Account type"))
            .Field(x => x.CompanyName, f => f
                .Label("Company name")
                .Required("Company name is required for business accounts.")
                .VisibleWhen("AccountKind", BormConditionOperator.Equals, "Business"))
            .Field(x => x.VatNumber, f => f
                .Label("VAT number")
                .Pattern(@"^[A-Z]{2}\d{8,12}$", "Use a format like GB123456789.")
                .VisibleWhen("AccountKind", BormConditionOperator.Equals, "Business"))
            .Field(x => x.AcceptTerms, f => f
                .Label("I accept the terms and conditions")
                .Required("You must accept the terms to continue."))
            .Build();
    }

    private void HandleSubmit(BormState state)
    {
        var json = System.Text.Json.JsonSerializer.Serialize(_model,
            new System.Text.Json.JsonSerializerOptions { WriteIndented = true });
    }
}
An unhandled error has occurred. Reload 🗙