2010-09-02 71 views
3

我有一个数据验证类,用于检查会议的开始日期是否在结束日期之前。将数据从模型传递到自定义验证类

该模型自动通过需要验证的日期,但我有点难以传递需要验证的数据。

这里是我的验证类

sealed public class StartLessThanEndAttribute : ValidationAttribute 
    {    
     public DateTime DateEnd { get; set; } 

     public override bool IsValid(object value) 
     {     
      DateTime end = DateEnd; 
      DateTime date = (DateTime)value; 

      return (date < end); 
     } 

     public override string FormatErrorMessage(string name) 
     { 
      return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name); 
     } 
    } 

这里是一个包含数据的注释

[StartLessThanEnd(ErrorMessage="Start Date must be before the end Date")] 
public DateTime DateStart { get; set; } 

这是我的控制器

[HttpPost, Authorize] 
    public ActionResult Create(Pol_Event pol_Event) 
    { 
     ViewData["EventTypes"] = et.GetAllEventTypes().ToList(); 

     StartLessThanEndAttribute startDateLessThanEnd = new StartLessThanEndAttribute(); 


     startDateLessThanEnd.DateEnd = pol_Event.DateEnd; 


     if (TryUpdateModel(pol_Event)) 
     { 
      pol_Event.Created_On = DateTime.Now; 
      pol_Event.Created_By = User.Identity.Name; 

      eventRepo.Add(pol_Event); 
      eventRepo.Save(); 
      return RedirectToAction("Details", "Events", new { id = pol_Event.EventID }); 
     } 

     return View(pol_Event); 
    } 

回答

3

验证属性是具有多个属性的工作应该是类适用于模型而不是单个属性:

[AttributeUsage(AttributeTargets.Class)] 
public class StartLessThanEndAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     var model = (MyModel)value; 
     return model.StartDate < model.EndDate; 
    } 
} 

[StartLessThanEnd(ErrorMessage = "Start Date must be before the end Date")] 
public class MyModel 
{ 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 
} 
+0

伟大的现在我怎么做在客户端验证的GetClientValidationRules方法。我想将一些属性值传递给客户端验证规则。 – War 2013-03-19 16:43:55

+0

如何捕捉验证逻辑模型的好例子,谢谢。 – 2013-07-16 00:36:33

相关问题