gpt4 book ai didi

Blazor:验证复杂类型

转载 作者:行者123 更新时间:2023-12-04 17:24:28 27 4
gpt4 key购买 nike

我在现实世界的应用程序中有一个非常复杂的表单。事实上 - 许多复杂的表格使用复杂的数据。在多个地方使用了不同的部件,它们具有我的表单所需的属性。所以它看起来像这样:

class FormData {

[ValidateComplexType]
public PropertyClass Feature { get; } = new PropertyClass();

[Required]
public string DirectProperty { get; set; }

}

class PropertyClass {

[Required]
public string NestedProperty { get; set; }

}
然后我有一个看起来像这样的表单片段:
<TextInput @bind-Value="Input.DirectProperty" />
<TextInput @bind-Value="Input.Feature.NestedProperty />
我想查看来自直接和嵌套属性的验证消息。
它不适用于 DataAnnotationsValidator .
我从直接属性中看到验证问题,但没有从嵌套属性中看到验证问题。
但真正邪恶的是 - 有时我会从嵌套的消息中收到验证消息。只是有时,而不是在尝试使用提交按钮实际提交表单时。好的,它是可重现的:我输入一个有效值并按 Enter,我输入一个无效值并按 Enter 或 Tab。然后我会看到消息,直到我单击提交按钮。这种行为是疯狂的、意外的和随机的。
所以微软的解决方案来了,遇到一个奇怪而特殊的包:
<PackageReference Include="Microsoft.AspNetCore.Blazor.DataAnnotations.Validation" Version="3.1.0-preview4.19579.2" />
您不会在 Visual Studio 的 NuGet 面板中搜索它。它可能已被微软取消上市。
但是,有一个(当前?)文档指向它:
https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-3.1
搜索文本“ValidateComplexType”或“ObjectGraphDataAnnotationsValidator”。
是的,他们承认这是实验性的,但首先 - 没有更新的版本,然后再一次,它是未列出的。 AFAIK 这是一个原因。
原因是它没有按预期工作,尤其是在升级其他软件包之后。
首先,它似乎有效。我验证了我的嵌套属性,那么有什么问题呢?单击几次后,我发现了相同的随机行为,但这一次 - 我收到重复的验证消息。因此,第一种方法的意外随机行为会通过另一个验证器显示出来。
为了消除随机性并恢复理智的验证行为,我必须将输入模型的层次结构展平。然后 - 没有随机发生。验证才有效。问题是 - 我的应用程序有许多非常大和复杂的表单。我将不得不重写其中的很大一部分以使随机行为消失。
所以这里有一个严肃的大问题:是否有没有官方的原因 ObjectGraphAnnotationValidator在布拉佐?也许以 Blazor 形式验证复杂对象的问题太难解决了?
我现在不知道该怎么办。研究如何制作我自己的 ObjectGraphAnnotationValidator ,或重写我的应用程序中的所有输入模型?选项 A 是一个兔子洞。恐怕我会花几个小时在上面,然后再次出现某种随机行为。选项 B 需要几个小时,但应该可行。那么,你会怎么做?进行复杂类型验证,还是放弃它,因为它不会在 Blazor 中可用,也可能在明年?

最佳答案

您可能会考虑在 Blazor 中使用 FluentValidation Blazored.FluentValidation .
Chris Sainty's blog post有关它的更多信息。

关于Blazor:验证复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64247248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com