我正在使用FluentValidation并像我一样进行验证
[HttpPost]
public ActionResult Create(CourseCategory category)
{
var result = new CourseCategoryValidator().Validate(category);
try
{
if (result.IsValid)
{
_uow.CourseCategory.Insert(category);
_uow.Commit();
FlashMessage(category.Code + " - " + category.Name + " created!", Models.FlashMessageType.Success);
return RedirectToAction("Index");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
}
}
catch (Exception)
{
ModelState.AddModelError("", "saving failed.");
}
return View(category);
}
但它有点混乱,必须重复每一个需要验证的行动。
我的问题是,有没有办法在击中控制器之前挂钩验证?所以我可以调用if(validator.IsValid)
然后如果验证失败,则会自动填充错误消息,因此我不必迭代它们。
答案 0 :(得分:3)
你不应该做那么多。
FluentValidation支持MVC的模型绑定。 This document拥有您需要的一切:
FluentValidationModelValidatorProvider.Configure();
添加到Global.asax文件来注册FluentValidation。将您的控制器更改为:
[HttpPost]
public ActionResult Create(CourseCategory category)
{
if (ModelState.IsValid)
{
_uow.CourseCategory.Insert(category);
_uow.Commit();
FlashMessage(category.Code + " - " + category.Name + " created!", Models.FlashMessageType.Success);
return RedirectToAction("Index");
}
else
{
return View(category);
}
}
希望这有帮助!