标签: fluentvalidation

验证消息包含“{PropertyName}”而不是属性名称

我使用流畅的验证和客户端不显眼的验证。

 <fieldset class="edit-root-form">
    <p>
        @Html.LabelFor(model => model.Login, UserRes.Login)
        @Html.TextBoxFor(model => model.Login)
        @Html.ValidationMessageFor(model => model.Login)
    </p>         
</fieldset>
Run Code Online (Sandbox Code Playgroud)

流畅的验证规则:

 this.RuleFor(x => x.Login).NotNull().EmailAddress()
Run Code Online (Sandbox Code Playgroud)

我收到了这样的错误消息:“ {PropertyName} ”不能为空。

生成的html:

<input data-val="true" data-val-regex="&amp;#39;{PropertyName}&amp;#39; is not a valid
email address."  data-val-required="&amp;#39;{PropertyName}&amp;#39; must not be
 empty." id="Login" name="Login" type="text" value="" class="input-validation-error">
Run Code Online (Sandbox Code Playgroud)

为什么MVC不替换PropertyName 真实字段名?

c# fluentvalidation unobtrusive-validation asp.net-mvc-3

5
推荐指数
1
解决办法
2158
查看次数

ASP.net MVC 中的流畅验证 - 数据库验证

我在我的 ASP.net MVC 3 项目中使用 Fluent Validation 框架。到目前为止,我所有的验证都非常简单(确保字符串不为空,只有特定长度等),但现在我需要验证数据库中是否存在某些内容。

  1. 在这种情况下应该使用 Fluent Validation 吗?
  2. 如果应该使用 Fluent Validation 完成数据库验证,那么我该如何处理依赖关系?验证器类是自动创建的,我需要以某种方式将我的存储库实例之一传递给它以查询我的数据库。

我试图验证的一个例子可能是:

我的页面上有一个下拉列表,其中包含所选项目的列表。我想在尝试保存新记录之前验证他们选择的项目是否确实存在于数据库中。

编辑
以下是 Fluent Validation 框架中常规验证的代码示例:

[Validator(typeof(CreateProductViewModelValidator))]
public class CreateProductViewModel
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public class CreateProductViewModelValidator : AbstractValidator<CreateProductViewModel>
{
    public CreateProductViewModelValidator()
    {
        RuleFor(m => m.Name).NotEmpty();
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

public ActionResult Create(CreateProductViewModel model)
{
    if(!ModelState.IsValid)
    {
        return View(model);
    }

    var product = new Product { Name = model.Name, Price = model.Price …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-validation fluentvalidation

5
推荐指数
1
解决办法
6998
查看次数

FluentValidation 检查子集合中的重复实体

我有一个MainEntity班级,它有一个SubEntity. 以下是当前的验证:

public class MainEntityValidator : AbstractValidator<MainEntity>
{
    public MainEntityValidator()
    {
        RuleFor(x => x.SubEntities).SetCollectionValidator(new SubEntityValidator());
    }

    public class SubEntityValidator : AbstractValidator<SubEntity>
    {
        public SubEntityValidator()
        {
            RuleFor(x => x.Field1).NotNull();
            RuleFor(x => x.Field2).NotNull();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何添加验证规则,以便只有唯一SubEntity对象(基于Field1Field2)必须在集合中?

c# fluentvalidation

5
推荐指数
1
解决办法
5396
查看次数

Fluent验证确保列表至少有一个属性值为somevalue的项目

假设我有以下viewmodel:

public class TaskViewModel{
  public MTask Task {get;set;}
  public List<DocIdentifier> Documents {get;set;}
  .....
}

public class DocIdentifier{
  public string DocID {get;set;}
  public bool Selected {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

这是Fluent Validation我使用的验证器:

public class TaskValidator : AbstractValidator<TaskViewModel>{
   public TaskValidator{

   }
}
Run Code Online (Sandbox Code Playgroud)

如何确保列表中至少有一个DocIdentifier对象Documents具有其Selected属性值True

asp.net-mvc fluentvalidation

5
推荐指数
1
解决办法
4073
查看次数

FluentValidation :是否可以在使用 ValidateAndThrow 调用验证器时添加规则集

例如,我有一个人员验证器

public class PersonValidator : AbstractValidator<Person> {

   public PersonValidator() {

      RuleSet("Names", () => {
      RuleFor(x => x.Surname).NotNull();
      RuleFor(x => x.Forename).NotNull();
 });

 RuleFor(x => x.Id).NotEqual(0);
 }
}
Run Code Online (Sandbox Code Playgroud)

使用 ValidateAndThrow 调用验证器时如何指定规则集

通常这是在调用 ValidateAndThrow 时所做的

public class ActionClass
{
  private readonly IValidator<Person> _validator;
  public ActionClass(IValidator<Person> validator)
  {
   _validator=validator
  }

  public void ValidateForExample(Person model)
  {
    _validator.ValidateAndThrow(model)

   //When there is no error I can continue with my operations
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道在校准验证时可以将规则集作为参数传递

我想知道是否也可以使用ValidateAndThrow来完成?

c# asp.net-mvc fluentvalidation

5
推荐指数
1
解决办法
1086
查看次数

FluentValidation何时不引发任何消息

我有这个代码的问题:

RuleFor(field => field.TermEndDate)
    .NotEmpty()
    .When(x => x.TermEndDate == x.TermStartDate)
    .WithMessage("error...");
Run Code Online (Sandbox Code Playgroud)

我设置TermEndDate = DateTime.Now但没有消息加注!

我的测试代码是:

var now = DateTime.Now;
var command = new AddTermCommand
{
    SchoolId = Guid.NewGuid(),
    TermStartDate = now,
    TermEndDate = now
};
var cmd = command.Validate();
if (!cmd.IsValid)
    Console.WriteLine(cmd.Errors.First().ErrorMessage);
Run Code Online (Sandbox Code Playgroud)

c# fluent fluentvalidation

5
推荐指数
1
解决办法
266
查看次数

当属性不为空时,使用 FluentValidation 检查电子邮件的有效性

我想用 FluentValidation 检查电子邮件格式。电子邮件不是强制性的。然后我只需要在属性不为空时检查。我该怎么做?下面我一直在检查。

RuleFor(x => x.Email)
    .EmailAddress()
    .WithLocalizedMessage(() => "My message.");
Run Code Online (Sandbox Code Playgroud)

谢谢

.net c# fluentvalidation angularjs

5
推荐指数
1
解决办法
1413
查看次数

如何直接针对 List&lt;T&gt; 进行验证?

我有一个模型类:

public class MyModel() { //properties here... }
Run Code Online (Sandbox Code Playgroud)

我想验证一个MyModel对象列表。所以我创建了这个验证器:

class MyModelListValidator : AbstractValidator<List<MyModel>>
{
    public MyModelListValidator ()
    {
        RuleFor(x => x)
            .SetCollectionValidator(new MyModelValidator())
            .When(x => x != null);
    }

    private class MyModelValidator : AbstractValidator<MyModel>
    {
        public MyModelValidator()
        {
            //MyModel property validation here...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但上面的不起作用。另一种方法是创建一个类,如:

public class MyModelList()
{
    public List<MyModel> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这会奏效。

但是有没有办法在不使用这个额外类的情况下做到这一点?

c# fluentvalidation

5
推荐指数
1
解决办法
2003
查看次数

FluentValidation.NET 等效于 [Display(Name)]

FluentValidation.NET之前,我可以像这样正确地给一个自定义标签:

[Display(Name="Blah")]
public string BlahBlahBlah { get; set; }
Run Code Online (Sandbox Code Playgroud)

我可以通过多种方式消耗它:

@Html.LabelFor(m => m.BlahBlahBlah)
@Html.DisplayNameFor(m => m.BlahBlahBlah)

<label asp-for="BlahBlahBlah"></label>
Run Code Online (Sandbox Code Playgroud)

现在我想从我的模型中删除所有数据注释,并转向流畅的验证。在我的验证器中,我有这个:

RuleFor(o => o.BlahBlahBlah)
    .NotEmpty()
    .WithName("Blah");
Run Code Online (Sandbox Code Playgroud)

但这不起作用。为什么?

c# asp.net-mvc fluentvalidation .net-core asp.net-core

5
推荐指数
1
解决办法
2994
查看次数

如何在 ASP.NET Core 中手动注册 FluentValidation 验证器?

我正在使用带有内置容器的 ASP.NET Core。

报名时应该做像这样

services
  .AddMvc()
  .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>())
Run Code Online (Sandbox Code Playgroud)

这会自动 1) 配置 FluentValidation,以及 2) 注册在程序集中找到的所有验证器。

但我想手动注册我的验证器。我怎么做?

c# fluentvalidation asp.net-core

5
推荐指数
1
解决办法
6504
查看次数