Один из подходов (даже для ленивых :-)) - выполнить итерацию валидаторов и создать собственное HTML-сообщение из бэкэнда:
StringBuilder myCustomHtml = new StringBuilder();
foreach (Control validator in this.Page.Validators)
{
IValidator currentValidator = validator as IValidator;
if (currentValidator != null && !currentValidator.IsValid)
{
myCustomHtml.AppendFormat("Bla Foo is missing");
}
}
Или что-то вроде этого (не проверял). Это должно дать вам полный контроль, хотя вы должны знать, что порядок управления в Page.Validators определяется построением дерева элементов управления во время проектирования. Недостатком является то, что для этой работы требуется обратная передача.
Другим подходом будет захват события в jquery и добавление туда пользовательских тегов и текста.
Однако, ища SO, я нашел это решение: наследовать от asp: validationsummary .