Если вы добавляете элементы управления, включая валидаторы, динамически, вам нужно добавить их на Page_Init, а не на Page_Load, иначе они не будут добавлены в дерево элементов управления правильно, т.е. они не участвуют в ViewState
Возможно, вам лучше использовать пользовательский валидатор, чем динамически добавлять требуемый валидатор. Динамическое управление в asp.net стало для меня ничем иным, как проблемой. Я бы избежал, если есть другое решение.