2010-05-21 24 views
16

Ho sempre visto molti campi nascosti usati nelle applicazioni web. Ho lavorato con il codice scritto per utilizzare molti campi nascosti e i valori dei dati dei campi visibili inviati avanti e indietro. Anche se non riesco a capire perché vengono usati i campi nascosti. Posso quasi sempre pensare a modi per risolvere lo stesso problema senza l'uso di campi nascosti. In che modo i campi nascosti aiutano nella progettazione?Perché vengono utilizzati i campi nascosti?

Qualcuno può dirmi qual è esattamente il vantaggio fornito dai campi nascosti? Perché vengono utilizzati i campi nascosti?

+0

In realtà, non riesco a trovare un esempio in cui non ho bisogno di un campo nascosto. Puoi fornirne uno? :) – ZeissS

+4

Perché questo taggato 'C#'? Intendevi chiedere specificamente l'uso dei campi nascosti in ASP.NET? –

+0

Sì, intendevo chiedere informazioni sull'utilizzo dei campi nascosti in ASP.NET. Ho taggato la domanda di conseguenza. grazie @ Jørn Schou-Rode – pavanred

risposta

16

I campi nascosti sono solo il modo più semplice, motivo per cui vengono utilizzati un po '.

Alternative:

  • memorizzare i dati in un server-side di sessione (con cookie di sessionid)
  • memorizzare i dati in un server-side di transazione (con id transazione come il campo nascosto singolo)
  • utilizzando sentiero URL invece di parametri di query campo nascosto dove applicabile

principali preoccupazioni:

  • il valore del campo nascosto non può essere attendibile per non essere manomesso da una pagina all'altra (al contrario di memoria del server-side)
  • grande dati devono essere pubblicati ogni volta, potrebbe essere un problema, ed è non è possibile per alcuni dati (ad esempio caricato immagini)

principali vantaggi:

  • sessioni appiccicose che si versano tra le pagine e più finestre del browser
  • senza pulizia lato server necessari (per Dati scaduti)
  • accessibili a client-side script
+1

+1 per eccellenti spiegazioni di vantaggi e insidie. – IAbstract

+2

Manca la valida alternativa ViewState per la memorizzazione di tali valori. –

+1

@Tim: ViewState * di ASP.NET * è implementato utilizzando campi di input nascosti. –

4

L'uso più tipico che vedo/utilizzo è per ID e altre cose che in realtà non devono essere presenti nella pagina per nessun altro motivo oltre a quello necessario a un certo punto per essere rispedito al server.

-edit, dovrebbe aver incluso più dettaglio-

Dire per esempio che avete un oggetto che si desidera aggiornare - l'interfaccia utente restituisce un insieme di valori e il server a quel punto può o non può sapere "hey questo è un oggetto cliente", quindi fai una richiesta al server e dici "hey, dammi ID 7" e ora hai il tuo oggetto cliente come lo sa il sistema. Gli aggiornamenti vengono applicati, convalidati, qualsiasi cosa e ora l'interfaccia utente ottiene il risultato completato.

Immagino che un buon argomento/giustificazione stia usando linq. Prova ad aggiornare un oggetto in linq senza prima ottenerlo dal DB. Non ha idea che sia qualcosa di cui è possibile tenere traccia fino a quando non si ottiene l'oggetto completo.

1

Sono generalmente utilizzati per memorizzare lo stato mentre un'interazione avanza. I cookie potrebbero invece essere utilizzati, ma alcune persone li disabilitano. Potrebbe anche utilizzare un singolo campo nascosto per indicare lo stato lato server, ma poi ci sono problemi di sticky di sessione.

3

Ci sono molti scenari utili.

Uno consiste nel "memorizzare" alcuni dati su una pagina che non devono essere inseriti da un utente. Ad esempio, memorizzare l'ID utente quando si genera una pagina, quindi questo valore verrà inviato automaticamente con il modulo di nuovo al server.

Un altro scenario è la sicurezza. Aggiungi qualche token nascosto alla pagina e verifica la sua esistenza sul server. Ciò consentirà di identificare se un modulo è stato inviato tramite il browser o da qualche bot che è stato appena pubblicato in qualche URL sul tuo sito.

12

Supponiamo di voler modificare un oggetto. Ora è utile mettere l'ID in un campo nascosto. Ovviamente, è necessario non fare mai affidamento su tale valore (ad esempio, assicurarsi che l'utente disponga dei diritti appropriati su insert/update).

Ancora, questa è una soluzione molto conveniente. Mostrare l'ID in un campo visibile (ad esempio, casella di testo di sola lettura) è possibile, ma irritante per l'utente.

Memorizzare l'ID in una sessione/cookie è proibitivo, perché non consente più finestre di modifica aperte contemporaneamente e impone restrizioni di durata (il timeout della sessione porta a un'operazione di modifica non funzionante, molto fastidiosa).

L'utilizzo dell'URL è possibile, ma interrompe le regole di progettazione, ovvero l'uso del POST durante la modifica dei dati. Inoltre, dal momento che è visibile all'utente crea URL più brutti.

3

Si mantiene le cose fuori del URL (come nel querystring) in modo che mantiene pulito. Mantiene anche le cose fuori dalla Session che potrebbero non essere necessariamente necessarie.

Oltre a ciò, non posso pensare a troppi altri vantaggi.

3

ecco una ragione, un modo conveniente di passare i dati tra codice client (javascript) e lato server.

1

Se si utilizza il campo nascosto nel modulo, si aumenta il carico del modulo includendo un nuovo controllo.

Se non è necessario prendere campo nascosto, non dovresti prenderlo perché non è adatto alle basi del punto di sicurezza. usare il campo nascosto non rientra nella buona programmazione. Perché influisce anche sulle prestazioni dell'applicazione.

Problemi correlati