Asp.net mvc Asp.Net MVC-FluentValidation

Asp.net mvc Asp.Net MVC-FluentValidation,asp.net-mvc,validation,Asp.net Mvc,Validation,在Asp.NETMVC中有没有一种方法可以使用某种流畅的验证 我的意思是,我的poco不是这样的: public class User { [Required] public int Id { get; set; } (在外部类中)具有类似的内容: 这在Asp.NETMVC2(或3)中是可能的吗 我知道这个库存在,但我想知道Asp.NETMVC的核心是否允许这样做 我不喜欢那样污染我的POCO。另外,如果我需要验证,比如说BeginDate在EndDate之前,会发生什么?使

在Asp.NETMVC中有没有一种方法可以使用某种流畅的验证

我的意思是,我的poco不是这样的:

public class User {

    [Required]
    public int Id { get; set; }
(在外部类中)具有类似的内容:

这在Asp.NETMVC2(或3)中是可能的吗

我知道这个库存在,但我想知道Asp.NETMVC的核心是否允许这样做

我不喜欢那样污染我的POCO。另外,如果我需要验证,比如说BeginDate在EndDate之前,会发生什么?使用属性时,您无法做到这一点。

集成得非常好。它带有一个模型绑定器,允许自动应用验证规则

例如:

[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
    public int? Id { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
    public MyViewModelValidator()
    {
        RuleFor(x => x.Id)
            .NotNull();
        RuleFor(x => x.EndDate)
            .GreaterThan(x => x.StartDate);
    }
}

但是我认为客户端验证并不完美?不,它不是完美的,但它使用简单的规则,如
NotNull
。对于自定义函数,您需要编写自定义客户端验证。
[Validator(typeof(MyViewModelValidator))]
public class MyViewModel
{
    public int? Id { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

public class MyViewModelValidator : AbstractValidator<MyViewModel>
{
    public MyViewModelValidator()
    {
        RuleFor(x => x.Id)
            .NotNull();
        RuleFor(x => x.EndDate)
            .GreaterThan(x => x.StartDate);
    }
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        // The model is valid => process it
        return RedirectToAction("Success");
    }
    // Validation failed => redisplay the view in order to show error
    // messages
    return View(model);
}