Ваш код правильный. Я пробую сам и все работает отлично.
Итак, я предлагаю вам попробовать этот код в отдельном проекте решения, чтобы увидеть, есть ли какие-либо другие проблемы.
О 3-м вопросе, вероятно, вам нужно использовать MaskedEditValidator, если вам нужно проверить введенную дату. Вы должны использовать CompareValidator, если вам нужно сравнить некоторые даты, например.
Вот хороший пример использования MaskedEditValidator:
<ajaxToolkit:MaskedEditValidator ID="MV_Date" runat="server" ControlToValidate="TextBox1"
ControlExtender="TextBox1_MaskedEditExtender" InvalidValueMessage="Invalid Date"
IsValidEmpty="False" />