我不知道如何突出显示无效字段并显示嵌套组件的单个 ValidationMessages 。添加到页面时相同的代码按预期工作,但是当移动到单独的组件时,页面的 ValidationSummary 显示该组件的错误很好,但组件本身不提供任何验证结果。
我进行了广泛的搜索,只找到了有关验证复杂模型的主题,但没有找到有关在嵌套组件中显示验证信息的主题。这表明我可能遗漏了一些简单的东西,但我无法弄清楚这是什么。
这是重现此行为的简化代码。
产品.cs
public class Product
{
public int Id { get; set; }
[Required(ErrorMessage = "Added On Date is required")]
public DateTime? AddedOn { get; set; }
[Required(ErrorMessage = "Product Name is required")]
public string Name { get; set; }
public int BrandId { get; set; }
public int ManufacturerId { get; set; }
}
ChildComponent.razor
<div class="card">
<div class="card-header">
@(new MarkupString(Caption))
</div>
<div class="card-body">
<input type="text" @bind-value=@TextValue />
<ValidationMessage For=@(() => TextValue) />
<input type="datetime-local" @bind-value=@DateValue />
<ValidationMessage For=@(() => DateValue) />
</div>
</div>
@code {
[Parameter]
public string Caption { get; set; }
[Parameter]
public string TextValue { get; set; }
[Parameter]
public DateTime? DateValue { get; set; }
}
TestPage.razor
@page "/test"
<EditForm OnValidSubmit="HandleFormSubmit" Model="@ProductModel">
<DataAnnotationsValidator />
@*ValidationMessages are returned/displayed*@
<div class="card">
<div class="card-header">
Control on the Page
</div>
<div class="card-body">
<input type="text" @bind-value=@ProductModel.Name />
<ValidationMessage For=@(() => ProductModel.Name) />
<input type="datetime-local" @bind-value=@ProductModel.AddedOn />
<ValidationMessage For=@(() => ProductModel.AddedOn) />
</div>
</div>
@*ValidationMessages are NOT returned/displayed*@
<ChildComponent Caption="Nested Component"
DateValue=@ProductModel.AddedOn
TextValue=@ProductModel.Name />
@*ValidationSummary displays errors as expected*@
<ValidationSummary />
<input type="submit" value="Save" class="btn btn-primary" />
</EditForm>
@code {
Product ProductModel = new Product();
private async Task HandleFormSubmit(EditContext context) { }
}
编辑:
使用@NeilW 提供的链接中的信息,我现在可以更改输入控件的 CSS(无效时为红色边框,有效时为绿色),但我仍然无法显示无效控件的 ValidationMessages。有什么建议么?