Qui è un'implementazione di base molto veloce (senza controllo degli errori, ecc) che dovrebbe fare quello che chiedi (solo sul lato server ... non farà convalida javascript lato client asp.net). Non l'ho provato, ma dovrebbe essere sufficiente per iniziare.
using System;
using System.ComponentModel.DataAnnotations;
namespace Test
{
[AttributeUsage(AttributeTargets.Property)]
public class DateGreaterThanAttribute : ValidationAttribute
{
public DateGreaterThanAttribute(string dateToCompareToFieldName)
{
DateToCompareToFieldName = dateToCompareToFieldName;
}
private string DateToCompareToFieldName { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
DateTime earlierDate = (DateTime)value;
DateTime laterDate = (DateTime)validationContext.ObjectType.GetProperty(DateToCompareToFieldName).GetValue(validationContext.ObjectInstance, null);
if (laterDate > earlierDate)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Date is not later");
}
}
}
public class TestClass
{
[DateGreaterThan("ReturnDate")]
public DateTime RentDate { get; set; }
public DateTime ReturnDate { get; set; }
}
}
fonte
2012-12-07 14:54:08
Perché si desidera utilizzare * attributi * per questo? Quando vorresti che fosse applicato? Come validazione? –
Credo che dovrebbe essere convalidato sul client attraverso la validazione lib. Quindi, per sicurezza, è possibile convalidare il back-end, aggiungendo errori a modelstate. – TNCodeMonkey
Perché vuoi confrontare? Il tuo scopo è limitare il valore dell'uno all'altro? Potresti provare a cercare "coercizione", così viene chiamato in WPF. Purtroppo non posso aiutarti con asp.net. –