MongoDB数据模型上的Blazor验证
我尝试将MongoDB类模型链接到Blazor页面组件。我试图将所有System.ComponentModel.DataAnnotations.ValidationAttribute保留在一个接口上,并将带有Bson装饰的“real”类分离为:MongoDB数据模型上的Blazor验证,mongodb,validation,blazor,datamodel,Mongodb,Validation,Blazor,Datamodel,我尝试将MongoDB类模型链接到Blazor页面组件。我试图将所有System.ComponentModel.DataAnnotations.ValidationAttribute保留在一个接口上,并将带有Bson装饰的“real”类分离为: public interface ITestIt { int id { get; set; } [Required(ErrorMessage = "Material cost is required")] [
public interface ITestIt
{
int id { get; set; }
[Required(ErrorMessage = "Material cost is required")]
[StringLength(5, ErrorMessage = "Name is too long.")]
string MyName { get; set; }
}
public class TestIt : ITestIt
{
[BsonId]
public int id { get; set; }
public string MyName { get; set; }
}
并将其作为以下内容包含在我的页面中:
<h1>Hello, world!</h1>
Welcome to your new app.
<EditForm Model=@testIt OnValidSubmit="HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="Name">Name</label>
<InputText @bind-Value=testIt.MyName class="form-control" id="Name" />
<ValidationMessage For="() => testIt.MyName" Description="Salut" />
</div>
<input type="submit" class="btn btn-primary" value="Save" />
</EditForm>
@code{
private ITestIt testIt;
private bool IsDone = false;
protected override async Task OnInitializedAsync()
{
if (IsDone) return;
testIt = new TestIt();
IsDone = true;
}
private void HandleValidSubmit()
{
Console.WriteLine("OnValidSubmit");
}
你好,世界!
欢迎使用您的新应用程序。
名称
@代码{
私人ITestIt testIt;
私有bool-IsDone=false;
受保护的重写异步任务OnInitializedAsync()
{
如果(IsDone)返回;
testIt=新testIt();
IsDone=true;
}
私人无效手册提交()
{
Console.WriteLine(“OnValidSubmit”);
}
但它不起作用,在不必用DataAnnotations标记修饰我的所有数据模型,也不必将每个属性逐个复制到其他对象的情况下,将两者分离的最佳方法是什么
谢谢!我不认为Blazor反映了接口的数据注释,只反映了实现对象的属性 我将验证完全保存在一个单独的项目中。为此,我使用FluentValidation 您可以编写一个组件,该组件接受一个
EditContext
作为级联参数,钩住它请求验证的事件,并执行FluentValidation代码
或者你可以使用一个预先制作的库,比如我在很多研究中都看到了这个库。我会看一看。我的另一种方法是在两个具有相同结构的不同类上使用序列化克隆。但是我们必须不断更新两个数据模型。这是一个验证的设计缺陷,无法将规则集成到类中,而不是UI中输入…asp.net验证是否查找接口上的数据批注?我所做的所有测试,答案都是否定的…仅在初级类中…我测试了您建议的一个:PeterleSlieMemoris,我发现了另一个:谁非常简单,工作起来很有魅力…我发现了谁更完整。