Ci sono due problemi con il tuo codice:
Come ho notato nei commenti, il primo problema è che non si può davvero confrontare con DateTime.Now
dal momento che chiamare DateTime.Now
dopo un po 'di tempo (anche molto piccolo) ti dà un valore diverso.
Il secondo problema è che si sta utilizzando il metodo When
. Il metodo When
viene utilizzato per specificare una condizione per eseguire la convalida in primo luogo (ad esempio, è possibile specificare che si desidera convalidare questa proprietà solo se il valore di alcune altre proprietà è 1), non può essere utilizzato per specificare un regola di convalida. Invece è possibile utilizzare il metodo Must
in questo modo:
RuleFor(field => field.TermEndDate)
.NotEmpty()
.Must(x => (DateTime.Now - x).Duration() > TimeSpan.FromMinutes(1))
.WithMessage("error...");
Qui sto usando Must
a dire che il valore di TermEndDate
dovrebbe essere almeno 1 minuto più o meno (1 minuto dalla DateTime.Now
) rispetto al momento in cui ho eseguire la convalida (che è quando invoco Validate
).
UPDATE:
Per confrontare TermEndDate
con TermStartDate
, si può fare in questo modo:
RuleFor(field => field.TermEndDate)
.Must((cmd, enddate) => enddate != cmd.TermStartDate)
.WithMessage("error...");
fonte
2015-12-31 12:32:22
'DateTime.Now' prima' = '' DateTime.Now' ora!. –
Che cosa stai cercando di fare? Puoi esprimere la regola di convalida che desideri avere in linguaggio naturale? La ragione per cui sto chiedendo è che il metodo 'When' è usato per limitare quando il validatore deve essere eseguito. Non specifica una regola di validazione. –
Sto provando a usare 'Quando()' ma non funziona!? – CodeMan