MongoDB数据模型上的Blazor验证

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")] [

我尝试将MongoDB类模型链接到Blazor页面组件。我试图将所有System.ComponentModel.DataAnnotations.ValidationAttribute保留在一个接口上,并将带有Bson装饰的“real”类分离为:

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,我发现了另一个:谁非常简单,工作起来很有魅力…我发现了谁更完整。