DataAnnotationsValidator 不适用于 Blazor 中的复合模型
DataAnnotationsValidator not working for Composite model in Blazor
<DataAnnotationsValidator />
不适用于我在剃须刀页面中使用的复合模型 TradeViewModel。
有什么办法解决吗?
剃须刀代码:
<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
<ObjectGraphDataAnnotationsValidator />
<div class="form-row">
<div class="form-group col">
<label>Name</label>
<InputText @bind-Value="@trade.invitedName" class="form-control" />
<ValidationMessage For="@(() => trade.invitedName)" />
</div>
<div class="form-group col">
<label>Email</label>
<InputText @bind-Value="@trade.invitedEmail" class="form-control" />
<ValidationMessage For="@(() => trade.invitedEmail)" />
</div>
</div>
</EditForm>
假设 inviteName 和 invitedEmail 是不同的模型。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class ModelA
{
[Required(ErrorMessage = "The Name is mandatory")]
public string invitedName { get; set; }
}
public class ModelB
{
[Required(ErrorMessage = "The Email is mandatory")]
public string invitedEmail { get; set; }
}
复合模型:
public class TradeViewModel
{
[ValidateComplexType]
public ModelA ModelA { get; set; }
[ValidateComplexType]
public ModelB ModelB { get; set; }
}
我尝试使用 ValidateComplex 类型方法,但我的代码无法识别它。安装的软件包。 Microsoft.AspNetCore.Components.DataAnnotations.Validation
对于复杂模型,请使用 <ObjectGraphDataAnnotationsValidator />
而不是 <DataAnnotationsValidator />
所以,代码如下
<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
<ObjectGraphDataAnnotationsValidator /> // modify this line <DataAnnotationsValidator />
<div class="form-row">
<div class="form-group col">
<label>Name</label>
<InputText @bind-Value="@trade.invitedName" class="form-control" />
<ValidationMessage For="@(() => trade.invitedName)" />
</div>
<div class="form-group col">
<label>Email</label>
<InputText @bind-Value="@trade.invitedEmail" class="form-control" />
<ValidationMessage For="@(() => trade.invitedEmail)" />
</div>
</div>
</EditForm>
当我将 Microsoft.AspNetCore.Blazor.DataAnnotations.Validation
包正确安装到项目中时,它对我有用。
我遇到了同样的问题,我找到了使用
的解决方案
[ValidateComplexType]
属性子 属性 级别和 ObjectGraphDataAnnotationsValidator
组件。
作为 post 中的状态
Blazor EditForm Validation not working when using Child Component
public class Starship
{
...
[ValidateComplexType]
public ShipDescription ShipDescription { get; set; } =
new ShipDescription();
...
}
和
<EditForm Model="@myModel" OnValidSubmit="@HandleValidSubmit">
<ObjectGraphDataAnnotationsValidator/>
<ValidationSummary />
<DataAnnotationsValidator />
不适用于我在剃须刀页面中使用的复合模型 TradeViewModel。
有什么办法解决吗?
剃须刀代码:
<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
<ObjectGraphDataAnnotationsValidator />
<div class="form-row">
<div class="form-group col">
<label>Name</label>
<InputText @bind-Value="@trade.invitedName" class="form-control" />
<ValidationMessage For="@(() => trade.invitedName)" />
</div>
<div class="form-group col">
<label>Email</label>
<InputText @bind-Value="@trade.invitedEmail" class="form-control" />
<ValidationMessage For="@(() => trade.invitedEmail)" />
</div>
</div>
</EditForm>
假设 inviteName 和 invitedEmail 是不同的模型。
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public class ModelA
{
[Required(ErrorMessage = "The Name is mandatory")]
public string invitedName { get; set; }
}
public class ModelB
{
[Required(ErrorMessage = "The Email is mandatory")]
public string invitedEmail { get; set; }
}
复合模型:
public class TradeViewModel
{
[ValidateComplexType]
public ModelA ModelA { get; set; }
[ValidateComplexType]
public ModelB ModelB { get; set; }
}
我尝试使用 ValidateComplex 类型方法,但我的代码无法识别它。安装的软件包。 Microsoft.AspNetCore.Components.DataAnnotations.Validation
对于复杂模型,请使用 <ObjectGraphDataAnnotationsValidator />
<DataAnnotationsValidator />
所以,代码如下
<EditForm Model="@TradeViewModel" OnValidSubmit="HandleValidSubmit" @onreset="HandleReset">
<ObjectGraphDataAnnotationsValidator /> // modify this line <DataAnnotationsValidator />
<div class="form-row">
<div class="form-group col">
<label>Name</label>
<InputText @bind-Value="@trade.invitedName" class="form-control" />
<ValidationMessage For="@(() => trade.invitedName)" />
</div>
<div class="form-group col">
<label>Email</label>
<InputText @bind-Value="@trade.invitedEmail" class="form-control" />
<ValidationMessage For="@(() => trade.invitedEmail)" />
</div>
</div>
</EditForm>
当我将 Microsoft.AspNetCore.Blazor.DataAnnotations.Validation
包正确安装到项目中时,它对我有用。
我遇到了同样的问题,我找到了使用
的解决方案[ValidateComplexType]
属性子 属性 级别和 ObjectGraphDataAnnotationsValidator
组件。
作为 post 中的状态 Blazor EditForm Validation not working when using Child Component
public class Starship
{
...
[ValidateComplexType]
public ShipDescription ShipDescription { get; set; } =
new ShipDescription();
...
}
和
<EditForm Model="@myModel" OnValidSubmit="@HandleValidSubmit">
<ObjectGraphDataAnnotationsValidator/>
<ValidationSummary />