Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    LinkButton generato da codice non funziona

    Salve a tutti.

    Avendo necessità di crearmi dei link dinamicamente in base al risultato di una query, ho creato questa funzione che nel suo interno ha il seguente codice:

    codice:
    LinkButton link = new LinkButton();
    link.ID = ...;
    link.Text = ...;
    link.Command += new CommandEventHandler(...);
    link.CommandName = ...;
    link.CommandArgument = ...;
    Oltre alla creazione dei link costruisco dinamicamente anche la tabella che li contiene, ed in effetti il risultato è apparentemente perfetto.

    Dal momento che al posto dei puntini c'è effettivamente quello che ci deve stare, vorrei sapere come mai al click del mouse, l'evento non entra in scena.

    Leggendo su qualche forum ho scoperto che se costruisco un bottone nel Page_Load, l'evento funzionerà, ed effettivamente è così. Mi piacerebbe sapere perchè.
    Comunque non è nel Page_Load che posso creare i link, proprio perchè la loro stessa creazione è generata da un'evento.

    Idee?

  2. #2

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    :master: va bene, tu crei i controlli dentro un evento, ma li devi RICREARE comunque ad ogni postback, e questo io lo farei nell'evento load.
    Pietro

  4. #4
    Ciao Pietro.
    Scusa la domanda, ma perchè dovrei ricrearli anche quando non sono richiesti?

    Mi spiego meglio.
    Per creare questi link dovrei andare a fare una query sul database e creare dinamicamente un'oggetto HtmlTable, con tutti gli HtmlTableRow, HtmlTableCell e altri che alla fine conterranno questi link e altro testo. Se l'utente non ha richiesto di visualizzare questi dati, la tabella comunque resterebbe con proprietà Visible = false e di fatto non verrebbe generato neanche il codice html per la sua visualizzazione.
    E' un inutile spreco di risorse, non ti pare?

    Non sono un senjor in ambiente .net, probabilmente mi sfugge qualcosa...

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da CowKaosProject
    Ciao Pietro.
    Scusa la domanda, ma perchè dovrei ricrearli anche quando non sono richiesti?

    Mi spiego meglio.
    Per creare questi link dovrei andare a fare una query sul database e creare dinamicamente un'oggetto HtmlTable, con tutti gli HtmlTableRow, HtmlTableCell e altri che alla fine conterranno questi link e altro testo. Se l'utente non ha richiesto di visualizzare questi dati, la tabella comunque resterebbe con proprietà Visible = false e di fatto non verrebbe generato neanche il codice html per la sua visualizzazione.
    E' un inutile spreco di risorse, non ti pare?

    Non sono un senjor in ambiente .net, probabilmente mi sfugge qualcosa...
    purtroppo, come professore valgo assai poco. Comunque prova a spiegare.
    Su richiesta dell'utente si scatena un evento (per esempio il click di un pulsante). Lì costruisco uno o più controlli, con i relativi eventi che interessano. Quando faccio click su questi controlli aggiunti da codice, questi controlli non esistono e nessun evento può generarsi. L'unico modo che si ha è di ricostruire quello che si è perso.
    La faccenda funziona così
    Pietro

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da CowKaosProject
    Ciao Pietro.
    Scusa la domanda, ma perchè dovrei ricrearli anche quando non sono richiesti?
    Non era inteso di generarli quando non sono richiesti, o quando non devono essere visibili.

    Una volta creata la tabella di cui parli, ad ogni postback della pagina, non essendo la suddetta tabella ed i suoi controlli Linkbutton 'scolpita' nell'html, va creata programmaticamente da codice ad ogni PostBack.

    Di solito una buona soluzione è creare uno UserControl a cui passi le proprietà dinamicamente, e che aggiungi alla pagina in un punto da te deciso, magari su un <asplaceHolder>

  7. #7
    Quando faccio click su questi controlli aggiunti da codice, questi controlli non esistono e nessun evento può generarsi.
    Ci siamo quasi... perchè i controlli non esistono quando clicco su di essi?
    In fin dei conti, l'html è stato generato correttamente.

  8. #8
    Originariamente inviato da djciko
    Una volta creata la tabella di cui parli, ad ogni postback della pagina, non essendo la suddetta tabella ed i suoi controlli Linkbutton 'scolpita' nell'html, va creata programmaticamente da codice ad ogni PostBack.
    Un momento, forse comincio a capire.

    Al click sul link, viene ricaricata la pagina.
    Però la tabella non ancora esiste perchè non si trova nell'html e non è creata nel Page_Load, quindi ASP.NET non è in grado di stabilire neanche quale event handler far partire.
    In effetti cosi mi torna.
    Non mi è chiarissimo perchè l'event handler non potrebbe essere allegato direttamente alla richiesta del link, ma forse pensandoci meglio, questo potrebbe portare problemi di sicurezza. :master:

    Una soluzione che mi viene in mente, potrebbe forse essere quella di allegare al link della pagina un parametro GET tipo ?button=1 che faccia capire che è stato cliccato uno di quei link generati da codice cosi da poterlo ri-creare nel Page_Load e legittimare la sua richiesta.
    Potrebbero esserci problemi di qualche tipo?

    Io vengo da php, e forse questa è una metodologia più usuale da quelle parti.

    Invece come potrebbe lo User Control aggirare questo problema?
    Grazie per le risposte

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Un usercontrol non può aggirare il problema.
    Allora, se mettiamo un controllo nella pagina, è asp.net che fa il lavoro per noi; se decidiamo di costruirli da codice, asp.net se ne lava le mani e il lavoro dobbiamo farlo tutto noi: tutto qui
    Pietro

  10. #10
    Ho appena testato di utilizzare un parametro GET.
    Nel Page_Load verifico che questo parametro esista. Se esiste, genera la Table.

    Tutto fila a questo punto.

    Continuo a pensare che la generazione della tabella è un inutile spreco, e mi chiedo, se non sia il caso di bypassare totalmente l'evento Command e di costruire un equivalente richiesta a modo mio, sfruttando javascript e un paio di input hidden...

    Grazie per i consigli. A presto!

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.