2009-10-22 25 views
9

Ho una pagina in cui voglio mantenere il valore dell'oggetto tra postback. Sto pensando a due modi per mantenere il valore degli oggettiQuale è meglio usare ViewState o hiddenfield

  1. memorizzare il valore in vista Sate
  2. Conservare il valore nel campo nascosto

che è migliore opzione per l'utilizzo in base alle prestazioni

risposta

10

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).

0

Mi piace ViewState - è molto più difficile da hackerare - una persona cattiva potrebbe facilmente inviare la tua pagina con dati errati nella tua ciao campi di dden

0

Si desidera memorizzarlo nello stato di visualizzazione. I campi nascosti possono essere aggiornati sul browser, poiché servono a memorizzare informazioni che possono essere manipolate dal lato client. Lo stato di visualizzazione sarà convalidato da asp.net contro la manomissione, dove dovrai farlo tu stesso con il campo nascosto.

2

Non importa perché ViewState è memorizzato in un input nascosto. Usa quello più facile per te. Se dipendesse da me, scegliere ViewState poiché il runtime di ASP.NET gestirà la serializzazione e la deserializzazione degli oggetti per te.

+0

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

+1

No, si fa un buon punto: ViewState può essere crittografato (ma non è sempre - di default è semplicemente codificato in base 64). Bella presa! :) –

+0

Grazie! Hai ragione riguardo alla base 64, ovviamente. Questa è una distinzione importante. Sto modificando la mia risposta per riflettere questo. – David

Problemi correlati