ViewState se non c'è bisogno di fare riferimento a esso nello script lato client. Un campo nascosto se lo fai.
Considerare inoltre che se i dati sono sensibili, il Viewstate è crittografato per impostazione predefinita, mentre il campo nascosto, per impostazione predefinita, lo memorizza come testo normale visibile a chiunque sappia come visualizzare l'origine.
Modifica
nota di Per @Andrew Hare sulla propria risposta, sto modificando questo. È una distinzione abbastanza importante da notare. Detesterei che qualcuno pensasse che fossero "al sicuro" usando il Viewstate in base alla mia supervisione.
Il Viewstate NON è crittografato per impostazione predefinita, è memorizzato come codifica Base-64. Può essere decodificato abbastanza facilmente, quindi utilizzare Viewstate perché è crittografato per impostazione predefinita non è valido. È meglio del semplice testo, ma non a chiunque abbia la possibilità di google "decrittografare Viewstate" o "decodificare Viewstate".
Quindi non fare affidamento su Viewstate per proteggere le informazioni nascoste nel codice lato client.
Un articolo here indica come crittografarlo correttamente. (ma avverte anche sui problemi di prestazioni).
Non sono sicuro di essere d'accordo ... Viewstate è crittografato dove un campo nascosto, per impostazione predefinita, non è A meno che non manchi qualcosa. Di solito mi fido delle tue risposte, quindi scommetto che mi manchi qualcosa. – David
No, si fa un buon punto: ViewState può essere crittografato (ma non è sempre - di default è semplicemente codificato in base 64). Bella presa! :) –
Grazie! Hai ragione riguardo alla base 64, ovviamente. Questa è una distinzione importante. Sto modificando la mia risposta per riflettere questo. – David