这是针对 .NET 8 Blazor Web 应用程序的。
我有一个带有编辑器模板的网格,如下所示:
<EditorTemplate>
@{
CurrentlyEditedItemSupplier = (context as ItemSupplier)!;
<HiSS.Body.Components.Custom.ItemSelector Items="@Items" CurrentItemSupplier="@CurrentlyEditedItemSupplier" Categories="@Categories" />
<TelerikValidationTooltip For="@(() => CurrentlyEditedItemSupplier.ItemId)"
TargetSelector="#Item-field"
Position="@TooltipPosition.Bottom">
</TelerikValidationTooltip>
}
它包含一个具有 3 个组合框的自定义控件 (ItemSelector)。第一个是类别选择器,用于将项目记录过滤到较小的子集,另外两个链接到项目并显示其中的不同字段,允许用户从 ID 号或描述中进行选择。父网格绑定到 ItemSupplier 类型的对象。它不包含绑定到第一个组合框中的类别 ID。另外两个绑定到对象中的项目 ID。
<TelerikComboBox Id="Category-field" Data="@Categories" @bind-Value="@CurrentCategoryId" TextField="@nameof(Category.Name)" ValueField="@nameof(Category.Id)" OnChange="@FilterItems"
Width="39%">
<ComboBoxSettings>
<ComboBoxPopupSettings Class="dropdownsize;" />
</ComboBoxSettings>
</TelerikComboBox>
<TelerikComboBox id="Item-Desc" Data="@FilteredItems" @bind-Value="@CurrentItemSupplier!.ItemId" TextField="@nameof(Item.Description)" ValueField="@nameof(Item.Id)"
Width="39%">
<ComboBoxSettings>
<ComboBoxPopupSettings Class="dropdownsize;" />
</ComboBoxSettings>
</TelerikComboBox>
<TelerikValidationTooltip For="@(() => CurrentItemSupplier.ItemId)"
TargetSelector="#Item-Desc"
Position="@TooltipPosition.Bottom">
</TelerikValidationTooltip>
<TelerikComboBox id="Item-ItemNo" Data="@FilteredItems" @bind-Value="@CurrentItemSupplier!.ItemId" TextField="@nameof(Item.ItemNo)" ValueField="@nameof(Item.Id)"
Width="20%">
<ComboBoxSettings>
<ComboBoxPopupSettings Class="dropdownsize;" />
</ComboBoxSettings>
</TelerikComboBox>
<TelerikValidationTooltip For="@(() => CurrentItemSupplier.ItemId)"
TargetSelector="#Item-ItemNo"
Position="@TooltipPosition.Bottom">
</TelerikValidationTooltip>
类别纯粹用于过滤项目以向用户提供较小的列表。不幸的是,验证不喜欢它存在,因为它不存在于验证模型中。如果我注释掉类别组合框,一切正常,但项目列表太大。如何进行验证以忽略自定义控件中的类别组合框?
结果非常简单 - 我所要做的就是将有问题的控件包装在它自己的编辑表单中:
<EditForm Model="@dummymodel">
<TelerikComboBox Id="Category-field" Data="@Categories" @bind-Value="@CurrentCategoryId" TextField="@nameof(Category.Name)" ValueField="@nameof(Category.Id)" OnChange="@FilterItems" >
<ComboBoxSettings>
<ComboBoxPopupSettings Class="dropdownsize;" />
</ComboBoxSettings>
</TelerikComboBox>
</EditForm>
虚拟模型定义为:
private object dummymodel = new object();
而且效果很好...