ASP.NET MVC ModelState始终对Fluent验证有效

时间:2012-07-26 11:52:56

标签: asp.net-mvc viewmodel fluentvalidation

我正在尝试使用ASP.NET MVC项目的流畅验证。我正在尝试验证我的视图模型。

这是我的viewmodel,

[Validator(typeof(ProductCreateValidator))]
public class ProductCreate
{
    public string ProductCategory   { get; set; }
    public string ProductName       { get; set; }
    ....
}

这是我的验证员类

public class ProductCreateValidator : AbstractValidator<ProductCreate> 
{
    public ProductCreateValidator()
    {
        RuleFor(product => product.ProductCategory).NotNull();
        RuleFor(product => product.ProductName).NotNull();
    }
}

在我的控制器中,我正在检查我的ModelState是否有效,

[HttpPost]
public ActionResult Create(ProductCreate model)
{
    /* This is a method in viewmodel that fills dropdownlists from db */
    model.FillDropDownLists();

    /* Here this is always valid */
    if (ModelState.IsValid)
    {
        SaveProduct(model);
        return RedirectToAction("Index");
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

这就是我所拥有的。当我的viewmodel完全为空时,我的问题是ModelState.IsValid返回true。我是否需要手动配置Fluent验证,以便可以将模型错误添加到ModalState?

1 个答案:

答案 0 :(得分:7)

正如documentation所述,请确保在Application_Start中添加以下行,以便交换数据注释模型元数据提供程序,并使用流畅的验证:

FluentValidationModelValidatorProvider.Configure();

你的行动中的以下评论也让我害怕:

/* This is a method in viewmodel that fills dropdownlists from db */
model.FillDropDownLists();

View模型不应该知道数据库的含义。因此,在视图模型中使用此类方法是一种非常错误的方法。

相关问题