Domanda

problema : Contenuto della pagina con Wizard di controllo con UpdatePanel e segnaposto. Sopra l'UpdatePanel è una DropDownList. Ho bisogno di visualizzare diversi controlli di input sotto l'elenco discesa quando l'utente modifica la selezione nell'elenco a discesa. Quando l'utente fa clic su 'Avanti' sul controllo procedura guidata, ho bisogno di essere in grado di ottenere i dati fuori di tali controlli dinamici pure.

So che tutti i controlli dinamici devono essere creati nel metodo OnInit al fine di ottenere la parte posteriore dei dati da questi controlli durante il postback. Tuttavia, quando viene licenziato la discesa evento SelectedIndexChanged di lista, il metodo OnInit viene chiamato ... poi il PageLoad ... e, infine, il gestore per l'evento SelectedIndexChanged viene chiamato. ViewState non è stato ripristinato fino a ben dopo i metodi OnInit & Pageload sono stati chiamati, quindi non c'è modo di sapere ciò che l'utente ha scelto nella casella di riepilogo al momento OnInit si chiama ... che esattamente quando ho tenuto a creare i controlli dinamici.

Quindi ... come si fa a risolvere questo problema? Ti basta scrivere l'intera pagina, o la maggior parte di esso, utilizzando JavaScript?

Grazie in anticipo.

È stato utile?

Soluzione

I tendono ad utilizzare un metodo di vecchia scuola per questo tipo di esigenza. Avrei scritto tutti i controlli necessari nel pannello di aggiornamento, con le loro proprietà Visible impostata su false. Poi, sul retro Post LEGGI stato del giù goccia e impostare i controlli approperate proprietà Visible su true. In questo modo non ci sono controlli "dinamici", e per il fatto che i controlli cui proprietà Visible è falsa non sono resi, non vengono scaricati fino a quando l'utente dovrebbe vederli.

Altri suggerimenti

è anche possibile utilizzare un asp: HiddenField e impostare il valore a un caso var si crea mentalmente. quindi eseguire un piccolo script jQuery in cima a guardare

$(document).on("change", "#ddlSelector", setControls);

poi basta fare una funzione, per esempio:

function setControls(event) { 
    event.preventDefault();
    var selector = hiddenfield.val();
}

quindi qualsiasi elemento per mostrare / nascondere può essere fatto con ottenere il tag:

$("#elementName").css("display", "inline"); 

o del display, nessuno da nascondere. Ho usato questo al lavoro perché a volte è necessario cambiare senza sparare il postback, ma ancora Raccogliere i dati quando si impegnano la forma.

Io in genere evitare di jQuery per molti eventi per la forza di codice e di sicurezza, ma la manipolazione elemento DOM può essere molto più facile, a volte con jQuery.

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