Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [ASP.NET + AJAX] - Assegnare Triggers a runtime

    Salve a tutti,
    ho messo su questo ciclo "do while" per far costruire un menu a runtime che legge le voci di menu da un DB. Ogni voce di menu per me diventa un "linkbutton" al quale assegno un dato evento "clik" e un nome pari al nome letto da DB (categoria).

    L'evento click di questo "linkbutton" deve poi essere assegnato come "trigger" ad un "UpdatePanel" in modo da usare AJAX per far si che al click sul menu tutto quello che deve succedere succeda dentro l'UpdatePanel.

    Diciamo che funziona... ma non bene.

    Questi i "sintomi" del problema: al load della pagina i menu vengono tutti costruiti, gli eventi clik assegnati e anche i trigger sembrano funzionare, premendo su una voce di menu qualsiasi LA PRIMA VOLTA l'evento mi si verifica nell'UpdatePane, e quindi tutto è ok, premendo invece LA SECONDA VOLTA la pagina viene ricaricata tutta (addio AJAX) e il ciclo si ripete così ogni volta.

    Non ho capito se è un problema di postback. Ho provato a mettere tutto il codice che vi posto sotto dentro un "If Not Page.IsPostbak", ma si incasina ancora di più.

    Non so proprio che pensare. Qualcuno saprebbe indicarmi dove sbaglio?



    codice:
                Do While dr_Legge.Read
                    
                    ' Memorizza Campi
                    '
                    Categoria = dr_Legge.Item("Categoria")
                    '
                    Dim lnkVoceMenu As New LinkButton
                    lnkVoceMenu.CssClass = "linkbutton"
                    lnkVoceMenu.ID = "lnkVoceMenu" & intCont.ToString
                    lnkVoceMenu.Text = Categoria & "</a></br>"
                    AddHandler lnkVoceMenu.Click, AddressOf mioEventoClick
                    '
                    pnlMenu.Controls.Add(lnkVoceMenu)
                    '
                    ' Gestione Triggers
                    '
                    Dim trigger As New AsyncPostBackTrigger
                    trigger.ControlID = "lnkVoceMenu" & intCont.ToString
                    trigger.EventName = "Click"
                    UpdatePanel1.Triggers.Add(trigger)
                    '
                    ' Distrugge oggetti
                    '
                    lnkVoceMenu = Nothing
                    trigger = Nothing
                    '
                    intCont += 1
                    
                Loop
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Sinceramente non ne so molto di ajax.net. Però ho fatto una prova semplificando il tuo codice.

    Al primo click dell'elemento creato da codice parte la richiesta ajax; al secondo ricarica la pagina; al terzo riparte ajax, ..., e così alternativamente.

    Allora ho sostituito la creazione dello AsyncPostBackTrigger ed ho messo, per ogni elemento creato:

    ScriptManager.GetCurrent(Page).RegisterAsyncPostBa ckControl(lb)

    e sembra funzionare.

    Il codice di prova è questo:

    codice:
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            CreaLink()
    
        End Sub
    
    
    
        Private Sub CreaLink()
            Dim lb As New LinkButton()
            lb.Text = "LinkButton1"
            AddHandler lb.Click, AddressOf mioEventoClick1
            Me.PlaceHolder1.Controls.Add(lb)
    
            ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(lb)
    
            Me.PlaceHolder1.Controls.Add(New LiteralControl("&_nbsp;&_nbsp;&_nbsp;"))
    
            lb = New LinkButton()
            lb.Text = "LinkButton2"
            AddHandler lb.Click, AddressOf mioEventoClick2
            Me.PlaceHolder1.Controls.Add(lb)
    
            ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(lb)
            'If Not Me.IsPostBack Then
            'Dim trigger As New AsyncPostBackTrigger()
            'With trigger
            '    .EventName = "click"
            '    .ControlID = Me.PlaceHolder1.Controls(0).UniqueID
            'End With
            'Me.UpdatePanel1.Triggers.Clear()
            'Me.UpdatePanel1.Triggers.Add(trigger)
    
            'End If
    
        End Sub
    
        Private Sub mioEventoClick1(ByVal sender As Object, ByVal e As EventArgs)
            Me.Label1.Text = DateTime.Now().ToString
        End Sub
    
        Private Sub mioEventoClick2(ByVal sender As Object, ByVal e As EventArgs)
            Me.Label2.Text = DateTime.Now().ToString
        End Sub
    Pietro

  3. #3
    Ciao Pietro, grazie mille del suggerimento.
    In effetti ho provato e funziona.

    Ho poi trovato anche un'altra soluzione in giro su internet. Praticamente senza far niente, si suggeriva di inserire il codice non nell'evento LOAD della pagina ma nell'evento INIT (sotto posto il codice).

    Così facendo funziona bene... mha! :master:

    Grazie.

    codice:
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
    
                Do While dr_Legge.Read
                    
                    ' Memorizza Campi
                    '
                    Categoria = dr_Legge.Item("Categoria")
                    '
                    Dim lnkVoceMenu As New LinkButton
                    lnkVoceMenu.CssClass = "linkbutton"
                    lnkVoceMenu.ID = "lnkVoceMenu" & intCont.ToString
                    lnkVoceMenu.Text = Categoria & "</a></br>"
                    AddHandler lnkVoceMenu.Click, AddressOf mioEventoClick
                    '
                    pnlMenu.Controls.Add(lnkVoceMenu)
                    '
                    ' Gestione Triggers
                    '
                    Dim trigger As New AsyncPostBackTrigger
                    trigger.ControlID = "lnkVoceMenu" & intCont.ToString
                    trigger.EventName = "Click"
                    UpdatePanel1.Triggers.Add(trigger)
                    '
                    ' Distrugge oggetti
                    '
                    lnkVoceMenu = Nothing
                    trigger = Nothing
                    '
                    intCont += 1
                    
                Loop
    
     End Sub
    Il mio ultimo libro:
    Giorni di Follia. Presenze inquietanti a Pescara.
    www.giornidifollia.it

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Accidenti! e pure l'ho provato anche così... sto perdendo troppi neuroni

    Pietro

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.