Blazor复合模型TradeViewModel的DataAnnotationsValidator不生效如何解决
Blazor复合模型TradeViewModel验证失效解决方案
1. 解决[ValidateComplexType]特性无法识别问题
操作步骤如下:
- 若使用**.NET 7及以上版本**:该特性已内置到框架中,无需额外安装
Microsoft.AspNetCore.Components.DataAnnotations.ValidationNuGet包,直接卸载冲突的第三方包,在类文件顶部引用命名空间即可:using System.ComponentModel.DataAnnotations; - 若使用**.NET 6及以下版本**:确保安装的
Microsoft.AspNetCore.Components.DataAnnotations.Validation包版本与项目.NET版本匹配,同时在类文件顶部引用专属命名空间:using Microsoft.AspNetCore.Components.DataAnnotations.Validation;
2. 修复Razor页面绑定路径错误
你当前的Input绑定没有匹配复合模型的层级结构,需要调整绑定路径和验证表达式:
<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset"> <ObjectGraphDataAnnotationsValidator /> <div class="form-row"> <div class="form-group col"> <label>姓名</label> <InputText @bind-Value="@TradeViewModel.ModelA.invitedName" class="form-control" /> <ValidationMessage For="@(() => TradeViewModel.ModelA.invitedName)" /> </div> <div class="form-group col"> <label>邮箱</label> <InputText @bind-Value="@TradeViewModel.ModelB.invitedEmail" class="form-control" /> <ValidationMessage For="@(() => TradeViewModel.ModelB.invitedEmail)" /> </div> </div> </EditForm>
3. 补充子模型实例初始化逻辑
如果未初始化子模型实例会触发空引用异常,在页面初始化逻辑中添加实例化代码:
// 页面代码部分 public TradeViewModel TradeViewModel { get; set; } protected override void OnInitialized() { // 初始化复合模型及子属性实例 TradeViewModel = new TradeViewModel { ModelA = new ModelA(), ModelB = new ModelB() }; }
完成以上操作后,复合模型的DataAnnotations验证即可正常生效。
内容的提问来源于stack exchange,提问作者Shrey
相关产品推荐
相关产品推荐

