You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:36:15