Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    addhandler NON nel pageload

    Vi riassumo l'idea: ho una dropdownlist bindata ad una tabella da cui pesca i valori.
    Quando viene selezionato un determinato item della dropdownlist, nascondo la dropdownlist e creo al volo dei controlli textbox con relativi validator e bottone di invio che permettono l'aggiunta di ulteriori record nella tabella. Devo quindi fare l'inserimento dei record, far scomparire questi controlli textbox e ri-visualizzare la dropdown ri-bindata con i nuovi item elencati.

    Pensate ad una dropdown con un elenco di automobili e un'ultima voce in elenco con scritto "aggiungi un'altra auto" selezionando la quale faccio comparire i controlli per l'inserimento nella tabella delle auto, inserisco nella tabella delle automobili, faccio ricomparire la dropdown ri-bindata con i record appena inseriti.

    Ho fatto quasi tutta la prima parte (nascosta dropdown, creato i controlli, i validator e il bottone di invio) ma la funzione che viene scatenata sul click del bottone appena creato non viene lanciata.

    Ho trovato scritto nonricordodove che l'addhandler deve essere indicato nel page load o prima, ma mi pare assurdo... nel pageload io il bottone neanche ce l'ho, viene creato via codice dentro ad un'altra funzione (alla selezione dell'item della dropdownlist), come faccio ad assegnargli la mia funzione di inserimento dei dati nella tabella???
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Ciao,
    L'evento non scatta perchè l'oggetto, l'handler e il metodo delegato all'evento devono tutti esistere dopo il postback.
    Ergo: non ti basta creare una volta sola l'handler per l'evento, lo devi ricreare al postback successivo, in maniera tale che esista (durante l'esecuzione) e possa essere invocato.
    Per questo "conviene" metterlo nella page_load.
    Io di solito dichiaro gli oggetti dinamici e assegno l'handler nel page_load, per poi switcharli a visible=false se non mi servono.

    Ciao,
    b.

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Effettivamente è proprio questo il problema. I controlli dinamici debbono SEMPRE essere ricreati ad ogni postback.
    Basta salvare nel viewstate tutto quello che mi può servire per RICREARE lo stato.
    Senza aver provato, penso che basti una variabile booleana che indichi se sono in "aggiungi un'altra auto" o no.
    Ad esempio, in una pagina di prova metto, nell'evento Load

    RipristinaControlli()


    qui controllo i parametri conservati nel viewstate e ricreo i controlli con i loro eventi.


    ps. può sembrare strano, ma funziona davvero bene
    Pietro

  4. #4
    forse non ho capito bene, ma non ti conviene mettere questi controlli per inserire una nuova auto dentro un placeholder da visualizzare o nascondere all'occorrenza?
    secondo me è molto meglio che creare e distruggere i controlli tutte le volte. E non hai problemi di gestione degli eventi ecc ecc.

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da carlogh
    forse non ho capito bene, ma non ti conviene mettere questi controlli per inserire una nuova auto dentro un placeholder da visualizzare o nascondere all'occorrenza?
    secondo me è molto meglio che creare e distruggere i controlli tutte le volte. E non hai problemi di gestione degli eventi ecc ecc.
    Secondo me il problema è più generale di questo caso contingente. Certo si può fare pure così, ma prima o poi si dovrà afrontare il problema di una costruzione dinamica della pagina, per esempi con l'inserimento di user control secondo il contesto.
    E allora ci si dovrà ricordare della regola: RICREARE SEMPRE I CONTROLLI AD OGNI POSTBACK. E questo è tutto, anche nei casi più complessi.
    Pietro

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Come già detto, basta una routine che utilizzando la session o il viewstate, se hai selezionato l'ultimo item della dropdown ricrea i controlli (nel Load o nell'Init), i loro gestori e li visualizza.

    Pero' non ho capito se puoi aggiungere una sola auto alla volta.
    Nel caso sia una, è abbastanza semplice facendo come detto

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    scusatemi, non vi ho più aggiornati:
    per liberarmi dai problemi di postback e viewstate (con cui effettivamente continuo a bisticciare) avevo già preso la strada del placeholder che anche carlogh suggeriva.

    Nella fattispecie è sicuramente la via più semplice anche se, per qualche motivo che ignoro, al termine dell'inserimento non riesco a fare il refresh del datasource della dropdownlist con la nuova voce inserita ma sono costretto a ri-bindare l'intero formview che la contiene (è bindato a dati anche lui) e quindi, di fatto, praticamente a fare un postback della pagina!

    Un purista di asp.Net potrebbe avere un mancamento vedendo quel che ho combinato, comunque funziona
    thank you all
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.