>我有一个视图模型,里面有 2 个对象
class trip
{
public DateTime returnedDate {get;set;}
....
}
class personData
{
public DateTime PassportExpDate {get;set;}
....
}
视图模型包含这两个对象
如何实现验证,以便护照扩展日期>返回日期
使用 FluentValidation.NET 和 PITA 使用数据注释呈现的完全微不足道的场景。
所以这里有一个简单的步骤:
- 安装
FluentValidation.MVC3
NuGet 包 -
在
Application_Start
中注册 FV 提供程序:FluentValidationModelValidatorProvider.Configure();
-
设计你的视图模型(注意:这不是一个纯视图模型,纯视图模型不应该对领域模型进行任何引用,但为了这个演示的目的,我将保持这种方式):
[Validator(typeof(MyViewModelValidator))] public class MyViewModel { public Trip Trip { get; set; } public PersonData PersonData { get; set; } }
-
现在为视图模型定义相应的 FV 验证器:
public class MyViewModelValidator : AbstractValidator<MyViewModel> { public MyViewModelValidator() { RuleFor(x => x.Trip.ReturnDate) .LessThan(x => x.PersonData.PassportExpDate) .WithMessage("You wanna get arrested?"); } }
-
控制器:
public class HomeController : Controller { public ActionResult Index() { var model = new MyViewModel { Trip = new Trip { ReturnDate = new DateTime(2012, 8, 13) }, PersonData = new PersonData { PassportExpDate = new DateTime(2012, 8, 12) } }; return View(model); } [HttpPost] public ActionResult Index(MyViewModel model) { return View(model); } }
-
视图:
@model MyViewModel @using (Html.BeginForm()) { <div> @Html.LabelFor(x => x.Trip.ReturnDate) @Html.EditorFor(x => x.Trip.ReturnDate) @Html.ValidationMessageFor(x => x.Trip.ReturnDate) </div> <div> @Html.LabelFor(x => x.PersonData.PassportExpDate) @Html.EditorFor(x => x.PersonData.PassportExpDate) @Html.ValidationMessageFor(x => x.PersonData.PassportExpDate) </div> <button type="submit">OK</button> }