我创建了一个EditForm包装表,如下所示:
**Index.razor**
@using System.ComponentModel.DataAnnotations;
<EditForm @ref="Form" Model="vms" OnSubmit="Submit">
<DataAnnotationsValidator></DataAnnotationsValidator>
<table class="table">
<thead>
<tr>
<th>Code</th>
</tr>
</thead>
<tbody>
@foreach (var vm in vms)
{
<tr>
<td>
<InputText @bind-Value="vm.Code"></InputText>
<ValidationMessage For="@(() => vm.Code)"></ValidationMessage>
</td>
</tr>
}
</tbody>
</table>
<input type="submit" class="btn btn-primary" value="Submit" />
</EditForm>
@code{
List<MyClass> vms;
EditForm Form;
class MyClass
{
[Required(ErrorMessage ="Required")]
public string Code { get; set; }
}
protected override void OnInitialized()
{
vms = new List<MyClass>()
{
new MyClass()
{
Code = "1111"
},
new MyClass()
{
Code = "2222"
}
};
}
private void Submit()
{
bool IsValid = Form.EditContext.Validate();
}
}
根据下图正确弹出消息错误:
但是,当我提交表单然后验证时,它似乎并没有进入无效状态。
调用后它仍然返回 true EditContext.Validate(),即使有错误。
我怎样才能让它工作?(当 EditForm 上下文中的至少一个模型项无效时,我如何得到错误,以便我可以做其他验证工作?)
[2021-01-16 更新] 也可以在此处找到答案。 https://www.pragimtech.com/blog/blazor/validating-complex-models-in-blazor/
简而言之,内置的 DataAnnotationValidation 不适用于数组。为了让它工作,你必须
- 安装Microsoft.AspNetCore.Components.DataAnnotations.Validation
- 使数组成为一个属性,然后用 [ValidateComplexType] 装饰它
- 使用 ObjectGraphDataAnnotationsValidator

