2012-10-29 54 views
2

在我的MVC应用程序,我有以下ViewModel如何应用自定义的验证规则给视图模型属性在MVC3

public class MyViewModel 
{ 
    public int StartYear { get; set; } 
    public int? StartMonth { get; set; } 
    public int? StartDay { get; set; } 

    public int? EndYear { get; set; } 
    public int? EndMonth { get; set; } 
    public int? EndDay { get; set; } 

    [DateStart] 
    public DateTime StartDate 
    { 
     get 
     { 
      return new DateTime(StartYear, StartMonth ?? 1, StartDay ?? 1); 
     } 
    } 

    [DateEnd(DateStartProperty="StartDate")] 
    public DateTime EndDate 
    { 
     get 
     { 
      return new DateTime(EndYear ?? DateTime.MaxValue.Year, EndMonth ?? 12, EndDay ?? 31); 
     } 
    } 
} 

,因为我需要的日期格式(还有一个我不使用日历助手逻辑背后)。现在,我创建了自定义的验证规则:

public sealed class DateStartAttribute : ValidationAttribute 
    { 
     public override bool IsValid(object value) 
     { 
      DateTime dateStart = (DateTime)value; 
      return (dateStart > DateTime.Now); 
     } 
    } 

    public sealed class DateEndAttribute : ValidationAttribute 
    { 
     public string DateStartProperty { get; set; } 
     public override bool IsValid(object value) 
     { 
      // Get Value of the DateStart property 
      string dateStartString = HttpContext.Current.Request[DateStartProperty]; 
      DateTime dateEnd = (DateTime)value; 
      DateTime dateStart = DateTime.Parse(dateStartString); 

      // Meeting start time must be before the end time 
      return dateStart < dateEnd; 
     } 
    } 

的问题是,DateStartProperty(在这种情况下StartDate)是不是在Request对象,因为它的形式发布到服务器后进行计算。因此dateStartString始终为空。我怎样才能得到StartDate的价值?

回答

1

您可以使用反射来获取的其他财产作为this answer(这似乎有点哈克给我),或为该类创建一个自定义验证属性,而不是一个单一的财产讨论了here

相关问题