Это должно быть сказано: вы всегда должны выполнять проверку на стороне сервера, так как пользователь может отключить JavaScript, и, следовательно, ваша проверка не будет применена. Но я рекомендую также выполнить проверку на стороне клиента, чтобы UX был лучше. Проверка на стороне сервера и на стороне клиента может легко существовать одновременно.
Для серверной части вы можете легко создать свой собственный атрибут проверки, производный от класса ValidationAttribute. Посмотрите на этот пример:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class EndDateAttribute : ValidationAttribute
{
public EndDateAttribute(DateTime endDate)
{
EndDate = endDate;
}
public DateTime EndDate { get; set; }
public override bool IsValid(object value)
{
if (value == null)
return false;
DateTime val;
try
{
val = (DateTime)value;
}
catch (InvalidCastException)
{
return false;
}
if (val >= EndDate)
return false;
return true;
}
}
Вы, вероятно, можете выяснить, как сделать StartDate.
ОБНОВЛЕНИЕ: использовать это довольно просто. Вы просто должны применить его к своим свойствам как любой другой (проверочный) атрибут. Например
[DisplayName("Effective Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
[StartDate(DateTime.Now)]
public DateTime EffectiveStartDate { get; set; }
[DisplayName("Effective End Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
[EndDate(new DateTime(2011, 9, 24)]
public DateTime EffectiveEndDate { get; set; }