仅在单击字段后启用必需的属性验证
Enabling required attribute validation only after a field clicked
如果我有以下 viemodel 属性:
public class ExampleViewModel
{
[Required(ErrorMessage = "The email field is required.")]
[EmailAddress(ErrorMessage ="Please enter a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "The first name field is required.")]
[RegularExpression("^[a-zA-Z\-]+$", ErrorMessage="Please enter a valid name")]
public string Forename { get; set; }
[Required(ErrorMessage = "The last name field is required.")]
[RegularExpression("^[a-zA-Z\-]+$", ErrorMessage = "Please enter a valid name")]
public string Surname { get; set; }
}
那么如何仅在单击字段并单击离开后才在前端启用必填字段?
目前,错误消息会立即呈现给查看者:
Example:
前端剃须刀页面正在使用 blazorise 验证,仅在所有字段都已填写时验证:
<Form method="post">
<Validations Mode="ValidationMode.Auto" Model="@ExampleViewModel" ValidatedAll="IsInvalid">
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">Email address</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="Enter email" @bind-Text="@ContactDetails.Email" MaxLength=40>
<Feedback>
<ValidationError />
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
<Row>
<Blazorise.Title Size="10">Your Details</Blazorise.Title>
</Row>
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">First name</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="John" @bind-Text="@ContactDetails.Forename" MaxLength=40>
<Feedback>
<ValidationError/>
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">Last name</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="Doe" @bind-Text="@ContactDetails.Surname" MaxLength=40>
<Feedback>
<ValidationError />
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
也许这可以帮助:
RequiredIf Conditional Validation Attribute
如果您想使用数据注释,您可以在您的视图模型中创建一个 属性 布尔值,指示您是否应该检查所需的内容。
public bool HasUserClicked { get; set; }
[RequiredIf(nameof("HasUserClicked",true)
public string MyProperty{ get; set; }
当用户单击时,您会切换该布尔值。
编辑
顺便说一句,不确定它是否适用于 Blazor ...
如果你想有更多的条件验证,你应该考虑 FluentValidation.
此功能将在下一个版本 v0.9.1 中提供。
如果我有以下 viemodel 属性:
public class ExampleViewModel
{
[Required(ErrorMessage = "The email field is required.")]
[EmailAddress(ErrorMessage ="Please enter a valid email address")]
public string Email { get; set; }
[Required(ErrorMessage = "The first name field is required.")]
[RegularExpression("^[a-zA-Z\-]+$", ErrorMessage="Please enter a valid name")]
public string Forename { get; set; }
[Required(ErrorMessage = "The last name field is required.")]
[RegularExpression("^[a-zA-Z\-]+$", ErrorMessage = "Please enter a valid name")]
public string Surname { get; set; }
}
那么如何仅在单击字段并单击离开后才在前端启用必填字段?
目前,错误消息会立即呈现给查看者:
Example:
前端剃须刀页面正在使用 blazorise 验证,仅在所有字段都已填写时验证:
<Form method="post">
<Validations Mode="ValidationMode.Auto" Model="@ExampleViewModel" ValidatedAll="IsInvalid">
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">Email address</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="Enter email" @bind-Text="@ContactDetails.Email" MaxLength=40>
<Feedback>
<ValidationError />
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
<Row>
<Blazorise.Title Size="10">Your Details</Blazorise.Title>
</Row>
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">First name</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="John" @bind-Text="@ContactDetails.Forename" MaxLength=40>
<Feedback>
<ValidationError/>
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
<Validation>
<Blazorise.Field>
<Blazorise.FieldLabel Class="is-bold">Last name</Blazorise.FieldLabel>
<Blazorise.TextEdit Placeholder="Doe" @bind-Text="@ContactDetails.Surname" MaxLength=40>
<Feedback>
<ValidationError />
</Feedback>
</Blazorise.TextEdit>
</Blazorise.Field>
</Validation>
也许这可以帮助: RequiredIf Conditional Validation Attribute
如果您想使用数据注释,您可以在您的视图模型中创建一个 属性 布尔值,指示您是否应该检查所需的内容。
public bool HasUserClicked { get; set; }
[RequiredIf(nameof("HasUserClicked",true)
public string MyProperty{ get; set; }
当用户单击时,您会切换该布尔值。
编辑 顺便说一句,不确定它是否适用于 Blazor ... 如果你想有更多的条件验证,你应该考虑 FluentValidation.
此功能将在下一个版本 v0.9.1 中提供。