基于MongoDB数据模型的Blazor验证



我试图将MongoDB类模型链接到Blazor页面组件。我试着保留所有的系统。组件模型。数据注释。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");
    }

但它不起作用,在不必用DataAnnotations标记装饰我的所有数据模型,也不必逐个将每个属性逐个复制到另一个对象的情况下,将两者分离的最佳方法是什么?

谢谢!

我不认为Blazor反映接口的数据注释,只反映实现对象的属性。

我将我的验证完全放在一个单独的项目中。为此,我使用FluentValidation。

您可以编写一个接受EditContext作为级联参数的组件,挂接到它请求验证的事件中,并执行FluentValidation代码。

或者您可以使用预先制作的库,例如https://www.nuget.org/packages/PeterLeslieMorris.Blazor.FluentValidation/

相关内容

  • 没有找到相关文章