我正在尝试将fluent验证与ASP.NET MVC项目一起使用。我正在尝试验证我的视图模型。
这是我的视图模型
[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);
}
这就是我所拥有的。我的问题是,当我的视图模型完全为空时,ModelState.IsValid
返回true
。我是否需要手动配置Fluent验证,以便将模型错误添加到ModalState?
如文档所述,请确保在Application_Start
中添加了以下行,以便交换数据注释模型元数据提供程序,并使用流畅的验证:
FluentValidationModelValidatorProvider.Configure();
你的行动中的以下评论也让我害怕:
/* This is a method in viewmodel that fills dropdownlists from db */
model.FillDropDownLists();
视图模型不应该知道数据库的含义。因此,在视图模型中使用这样的方法是非常错误的。