有没有办法对 ViewModel 中的一组相似属性应用 Fluent Validation?

问题描述 投票:0回答:1

我得到了一个 ViewModel (MovieNamesModel),如下所示:

{
  public string? MovieName1 { get; set; }
  public string? MovieName2 { get; set; }
  public string? MovieName3 { get; set; }
  ...
  ...
  public string? MovieName15 { get; set; }

  public DateTime MovieDate1 { get; set; }
  public DateTime MovieDate2 { get; set; }
  public DateTime MovieDate3 { get; set; }
  ...
  ...
  public DateTime MovieDate10 { get; set; }
}

我需要在此 ViewModel 上实现验证。最初,我想到使用数据注释来实现同样的目的。现在,使用数据注释实现日期时间验证(日期范围)至关重要。

然后我开始了解 Fluent Validation,并考虑将所有验证保留在一个地方。

所有 MovieName 字段的验证都是相同的,MovieDate 字段也是如此。

所以,我想为一堆相似的属性实现相同的 RuleFor<>,并且错误消息也需要写一次。

如下所示:

RuleFor(x => new { MovieName1, MovieName2, MovieName3, ..., MovieName15 })
    .MaximumLength(50)
    .WithMessage("MovieName<how to get the respective Movie Number here> can be of max 50 characters.");

-- The same am looking for Date Range Validation --

因此,这将对一堆相似类型的属性应用相同的规则。我不必一次又一次地编写/修改所有字段的错误消息。

谢谢..

c# entity-framework fluentvalidation
1个回答
0
投票

您可以使用

ValidationRule
请参阅 https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-implement-binding-validation?view=netframeworkdesktop-4.8

旁注: 您可以添加一个带有

Movie
Name
属性的类
Date
,而不是重复电影的名称和日期。然后在每个属性的 setter 中(以及构造函数中)添加验证。 现在您可以在 ViewModel 中使用
ObservableCollection<Movie>
并使用 ListView 或类似的东西与数据模板结合使用来显示您的电影。例如https://www.c-sharpcorner.com/UploadFile/e06010/observablecollection-in-wpf/

© www.soinside.com 2019 - 2024. All rights reserved.