MVC 3 验证不同类中的 2 个字段



>我有一个视图模型,里面有 2 个对象

class trip
{
    public DateTime returnedDate {get;set;}
    ....
}
class personData
{
   public DateTime PassportExpDate {get;set;}
    ....
}

视图模型包含这两个对象

如何实现验证,以便护照扩展日期>返回日期

使用 FluentValidation.NET 和 PITA 使用数据注释呈现的完全微不足道的场景。

所以这里有一个简单的步骤:

  1. 安装 FluentValidation.MVC3 NuGet 包
  2. Application_Start中注册 FV 提供程序:

    FluentValidationModelValidatorProvider.Configure();
    
  3. 设计你的视图模型(注意:这不是一个纯视图模型,纯视图模型不应该对领域模型进行任何引用,但为了这个演示的目的,我将保持这种方式):

    [Validator(typeof(MyViewModelValidator))]
    public class MyViewModel
    {
        public Trip Trip { get; set; }
        public PersonData PersonData { get; set; }
    }
    
  4. 现在为视图模型定义相应的 FV 验证器:

    public class MyViewModelValidator : AbstractValidator<MyViewModel>
    {
        public MyViewModelValidator()
        {
            RuleFor(x => x.Trip.ReturnDate)
                .LessThan(x => x.PersonData.PassportExpDate)
                .WithMessage("You wanna get arrested?");
        }
    }
    
  5. 控制器:

    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);
        }
    }
    
  6. 视图:

    @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>
    }
    

相关内容

  • 没有找到相关文章

最新更新