blazor-server-side - 为什么带有 FluentValidation 的 MudBlazor SelectList 会抛出“验证函数错误”
问题描述
我正在使用 Blazor Server 并在我的模型上使用 FluentValidation,如下所示:
public class ItemModel
{
public ItemModel()
{
Items = new string[]{"A","B","C"};
}
public string[] Items {get;set;}
public string Item {get;set;} = string.Empty;
}
public class ValidateItemModel : AbstractValidator<ItemModel>
{
public ValidateItemModel()
{
RuleFor(_ => _.Item).NotEmpty()
.WithMessage("You need to select an item");
}
public Func<object, string, IEnumerable<string>> Validate => (model, propertyName) =>
{
var result = Validate(ValidationContext<T>.CreateWithOptions((T)model,
x => x.IncludeProperties(propertyName)));
if (result.IsValid)
return Array.Empty<string>();
return result.Errors.Select(e => e.ErrorMessage);
};
}
在 DI 中,我正在像这样注册我的验证器:
services.AddValidatorsFromAssemblyContaining<ValidateItemModel>();
在我的 MudBlazor 组件中,我定义了一个 MudSelect,如下所示:
@inject ValidateItemModel validator
<MudItem xs="12" md="4">
<MudSelect T="string" @bind-Value="@Model.Item" Validation="validator.Validate">
@foreach (var item in Model.Items)
{
<MudSelectItem T="string" Value="@Model.Item">@item</MudSelectItem>
}
</MudSelect>
</MudItem>
但是,当我在 post 上验证表单或更改 select 的值时,会出现以下错误消息:
验证适用于其他元素,例如 MudText,但来自 MudSelect 的值甚至不进入验证 Func。当涉及到选择列表时,该文档没有显示任何示例可以促进与常规输入不同的方法。
任何有类似经验的解决方案?
解决方案
原来我失踪了
For="@(()=> Model.Item)
在我的 MudSelect 上。
添加这个解决了它。这个问题可能应该归档为拼写错误或“RTFM”。
推荐阅读
- git - 壁球提交是否会释放 Git LFS 存储
- javascript - 如何在 React 中包含 SVG 文件?
- ruby-on-rails - Stripe Webhook 触发但 Stripe 事件方法未运行
- javascript - 如何删除数据表文件上传中的按钮
- c# - 一个 ControlTemplate 中的多个 ContentPresenter
- android - 从一个活动调用解密方法到适配器
- c# - 如何在 C# 中将 Html 代码转换为 Word 文档
- c++ - MSVC 不良程序集生成
- python - 如何在 django 中通过 ManyToManyField 组合查询集
- android - Ionic 5 ERR_AVD_HOME_NOT_FOUND:找不到有效的 Android AVD 主页。在 Windows 10 中