指定DataAnnotationsValidator应验证哪些属性

问题描述 投票:0回答:1

我的剃须刀组件带有EditFormDataAnnotationsValidator。表单具有一个属性的输入字段,但是我的模型具有两个必需的属性。是否可以确切指定应验证的属性?我当然可以在代码中为该属性分配一个值,但最好避免这种情况。

我的代码如下:

@page "/counter"

<EditForm EditContext="@_editContext">

    <DataAnnotationsValidator />
    <ValidationSummary />
    <div class="form-group">
        <label class="control-label">Name:</label>
        <InputText @bind-Value="_model.Name" class="form-control" />
        <ValidationMessage For="@(() => _model.Name)" />
    </div>

    <button type="submit">Submit</button>
</EditForm>

@code {

    class MyModel
    {
        [System.ComponentModel.DataAnnotations.Required]
        public string Name { get; set; }

        [System.ComponentModel.DataAnnotations.Required]
        public string Email { get; set; }
    }

    private EditContext _editContext;
    private MyModel _model = new MyModel();

    protected override void OnInitialized()
    {
        _editContext = new EditContext(_model);
    }
}
blazor
1个回答
0
投票

Blazor的DataAnnotations验证支持旨在与表单字段和编辑上下文中的整体模型一起使用。您可以按照说明in the documentation here.

扩展验证行为

或者,您也可以将初始化方法中的Context限制为_editContext = new EditContext(_model.Name);,因此您只考虑编辑上下文中的Name属性,但是除非您将MyModel.Name属性设置为初始化为空字符串,如下所示:public string Name { get; set; } = "";。在这种情况下,您应该在Name中添加另一个数据注释以指定最小长度,以确保用户仍然必须输入内容。

也许更大的问题是,是否需要电子邮件地址,为什么不也以表格形式捕获它?相反,如果您不需要捕获它,为什么要在模型中包括它?

此用例的一个更简单的选择是将模型限制为直接使用的模型。如果确实必须绕过Email属性的验证,请记住,用来装饰属性的DataAnnotations设计为可用于某种形式的验证。您最好在此表单的上下文中使用数据传输对象,使其仅捕获当前所需的only,例如Name属性,然后根据需要通过编程将其分配给更大的模型验证后设置方法,而不是运行验证的方法。当然,这违背了注释起初的目的,因此请思考一下什么才是最有意义的。随你(由你决定。

© www.soinside.com 2019 - 2024. All rights reserved.