如何关闭Blazor嵌套自定义控件中分类下拉框的验证
解决Blazor中分类下拉框触发无关验证的问题
针对你的场景,分类下拉框仅用于过滤项列表,不属于ItemSupplier模型字段却触发验证报错,可通过以下几种方式解决:
方式一:给分类绑定字段添加[ValidateNever]特性
在自定义组件ItemSelector的代码中,给CurrentCategoryId字段添加[ValidateNever]特性,明确告知验证系统忽略该字段:
using System.ComponentModel.DataAnnotations; // 自定义组件内的字段 [ValidateNever] public int? CurrentCategoryId { get; set; }
方式二:阻止分类下拉框的默认验证行为
直接在分类下拉框组件上添加@oninvalid:preventDefault属性,阻止该控件触发验证错误:
<TelerikComboBox Id="Category-field" Data="@Categories" @bind-Value="@CurrentCategoryId" TextField="@nameof(Category.Name)" ValueField="@nameof(Category.Id)" OnChange="@FilterItems" Width="39%" @oninvalid:preventDefault> <ComboBoxSettings> <ComboBoxPopupSettings Class="dropdownsize;" /> </ComboBoxSettings> </TelerikComboBox>
方式三:从验证上下文中移除分类字段的验证消息
如果上述方式不适用,可通过订阅EditContext的验证事件,手动移除分类字段相关的验证消息:
[Inject] private EditContext? EditContext { get; set; } protected override void OnInitialized() { if (EditContext != null) { EditContext.OnValidationRequested += (_, _) => { var categoryValidationMessages = EditContext.GetValidationMessages() .Where(msg => msg.MemberNames.Contains(nameof(CurrentCategoryId))) .ToList(); foreach (var msg in categoryValidationMessages) { EditContext.RemoveValidationMessage(msg); } }; } }
推荐优先使用前两种方式,实现更简洁直接。
内容的提问来源于stack exchange,提问作者Rob Marsh
相关产品推荐
相关产品推荐

