ASP.NET VS2008 C # - elenco a discesa - postback
-
05-07-2019 - |
Domanda
Come utilizzare un elenco a discesa senza autopostback = true.
Il valore sul server non viene modificato in base a quello selezionato dal lato client. Come ho già detto, non desidero che per ogni menu a discesa ho l'autopostback che attiverà un postback.
Soluzione
Ogni volta che ho perso il valore del menu a discesa è perché ho sbagliato e ripopolato il menu a discesa prima di gestire la modifica del valore. Per me, sono stati i menu a discesa che ho bisogno di fare qualcosa di speciale con come aggiungere gli attributi degli elementi per Javascript, ecc. Questi sono i dati che devono essere aggiunti ad ogni caricamento della pagina (ovvero i dati che non sono persistenti nel menu a discesa come i nomi e i valori di ciascun elemento). In questi casi ho svolto questo lavoro al caricamento, quindi provo a recuperare il valore più avanti nel ciclo di vita della pagina e DOH!
Ecco il ciclo di vita della pagina:
http://msdn.microsoft.com/en-us/library /ms178472.aspx
Dollari alle ciambelle è quello che sta succedendo. Probabilmente stai solo ricaricando gli elementi prima di iniziare a gestire qualsiasi evento di postback che stai utilizzando per acquisire il valore. Se lo stai facendo e non riesci ad aggirare questo flusso di lavoro, salva l'indice selezionato all'inizio della logica che popola il menu a discesa, quindi imposta l'indice selezionato del menu a discesa con quel valore al termine.
Altri suggerimenti
verrà salvato nel viewstate, quindi il valore sarà corretto quando alla fine pubblichi un postback e se sei davvero disperato per ottenere il valore corrente senza un postback, javascript sarebbe il modo di farlo.
Nel peggiore dei casi puoi prendere il valore dall'oggetto richiesta:
string selectedID = Request[DropdownControl.UniqueID];
Dovresti assicurarti di riempire la casella di selezione solo con le opzioni durante il caricamento della pagina iniziale e non di nuovo durante il postback
if (!this.Page.IsPostBack) {
//fill select box here
}