i valori passati in campi hidden hanno forti limiti di lunghezza (255 caratteri)
così come i moduli passati con metodo get (della querystring vengono presi in considerazione solo tot caratteri, non ricordo di preciso ma mi sembra ancora 255)

se ti può essere utile, in php io faccio così:
la pagina che invia il form è la stessa che lo riceve,
impostata per riscrivere tutti i valori nei relativi campi se il form non fosse compilato in maniera x me valida

i controlli lato server li faccio a inizio pagina, se ok procedo a fare quello che dovevo fare
(inserimento in db, invio via mail, etc...) e non ristampo il form

altrimenti, se ci sono errori, scrivo a video dove sono gli errori (o faccio apparire un alert e do il focus al primo campo con errorri)
e ripresento tutto il form già compilato