Posso utilizzare ViewState per eliminare la necessità di passare una stringa di query?

StackOverflow https://stackoverflow.com/questions/1206492

  •  05-07-2019
  •  | 
  •  

Domanda

Ho una pagina con diversi elenchi espandibili. In un mondo perfetto, vorrei visualizzare i collegamenti a ciascuno di questi elenchi e quando si fa clic, verrà ricaricato la pagina con quel particolare elenco visualizzato. Ho letto che ViewState può eliminare la necessità di campi di input nascosti, stringhe di query, ecc., Ma non ho familiarità con il concetto.

Fondamentalmente devo realizzare due cose:

  1. Aggiungi ID dell'elenco a ViewState obj quando si fa clic sul collegamento
  2. Leggi ID dall'oggetto ViewState quando la pagina è caricata, visualizza tale elenco

Qualcuno può fornirmi alcune risorse e / o aiuto su questo argomento? Grazie!

È stato utile?

Soluzione

ViewState è essenzialmente un campo nascosto codificato a lungo, memorizzato nella parte superiore della pagina. La differenza fondamentale tra questo e un normale campo nascosto è che ASP .NET lo decodificherà e lo analizzerà automaticamente su un postback.

Esistono modi migliori per ottenere ciò che vuoi fare.

  • È possibile utilizzare la stringa di query. Tutto quello che stai passando è un ID elenco. Aggiungi l'ID elenco alla fine dei tuoi collegamenti e cercalo su Page_Load. Carica l'elenco appropriato se lo trovi. Ti consigliamo di gestire il caso in cui non viene passato un ID elenco. La querystring non è malvagia . Può aiutare notevolmente a ridurre il peso della pagina. Se utilizzato con un URL rewriter decente, hai molto controllo su ciò che viene passato (e soprattutto, cosa non lo fa)
  • Se si utilizzano i controlli ASP .NET (come Button o LinkButton) per attivare la visualizzazione di un elenco, è possibile impostare la proprietà CommandArgument e prenderlo nel codice dell'evento. È quindi possibile passare questo come parametro a qualsiasi metodo o Control stia gestendo il rendering dell'elenco.

Altri suggerimenti

ViewState viene utilizzato per archiviare informazioni su una singola pagina tra post back, non passare argomenti tra le pagine.

Puoi passare argomenti tra le pagine usando:

  1. Sessione
  2. Stringa di query
  3. Cookie
  4. Database personalizzato
  5. Postback su più pagine

Nessuno di questi metodi aggiungerà automaticamente dati al ViewState della pagina richiesta. Di questi, credo che solo il n. 2 funzioni con collegamenti HTML diretti (GET), il resto di solito comporta un postback (POST).

Avrai sempre bisogno di una sorta di setter ViewState ( ViewState [" Id "] = source.Id ) nella pagina richiesta.

Procedura: passare valori tra le pagine Web ASP.NET

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top