クライアント側で期待どおりに機能するカスタム データ注釈を作成し、入力された日付が無効な場合にユーザーにカスタム メッセージを正しく表示します。ただし、エントリがサーバー側の検証に失敗した場合は、デフォルトのエラー メッセージが返されます。サーバー側の検証に失敗したときにカスタム メッセージも表示されない理由の根本にたどり着くことができません。ステップスルーすると、デバッガーではすべて問題ないように見えますが、出力は最終的に正しくありません。どんな助けでも大歓迎です!
public class DobViewModel
{
[DateTypeWithPhrase()]
public DateTime? DateOfBirth { get; set; }
}
public class DataTypeWithPhraseAttributeAdapter : DataAnnotationsModelValidator<DateTypeWithPhraseAttribute>
{
private readonly DateTypeWithPhraseAttribute _attribute;
public DataTypeWithPhraseAttributeAdapter(ModelMetadata metadata, ControllerContext context, DateTypeWithPhraseAttribute attribute)
: base(metadata, context, attribute)
{
_attribute = attribute;
}
public static void SelfRegister()
{
DataAnnotationsModelValidatorProvider
.RegisterAdapter(
typeof(DateTypeWithPhraseAttribute),
typeof(DataTypeWithPhraseAttributeAdapter));
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
return new[] { new ModelClientValidationDateRule(_attribute.ErrorMessage) };
}
}
public class DateTypeWithPhraseAttribute : DataTypeAttribute
{
public DateTypeWithPhraseAttribute() : base(DataType.Date)
{
ErrorMessageResourceName = null;
ErrorMessage = ErrorPhrase;
}
public string ErrorPhrase = "Invalid Date";
}