【问题标题】:Enabling required attribute validation only after a field clicked仅在单击字段后启用必需的属性验证
【发布时间】:2020-10-10 15:18:15
【问题描述】:

如果我有以下 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>

【问题讨论】:

  • 您可以从类中删除属性并在点击事件中进行验证

标签: c# asp.net razor blazor .net-core-3.1


【解决方案1】:

此功能将在下一个版本 v0.9.1 中提供。

【讨论】:

  • 下一个版本到底是什么?
  • Blazorise 的下一个版本。
【解决方案2】:

也许这会有所帮助: RequiredIf Conditional Validation Attribute

如果您想使用数据注释,您可以在视图模型中创建一个属性布尔值,指示您是否应该检查所需的内容。

public bool HasUserClicked { get; set; }

[RequiredIf(nameof("HasUserClicked",true)
public string MyProperty{ get; set; }

当用户单击时,您会切换该布尔值。

编辑 顺便说一句,不确定它是否适用于 Blazor... 如果你想要更多的条件验证,你应该考虑FluentValidation

【讨论】:

  • RequiredIf 在 .net core 3.1 中不可用,我已尝试按照此 answer 扩展 RequiredAttribute 类,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 2021-01-11
  • 2018-05-12
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多