Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    recuperare la proprietà text dal viewstate...

    Spero di spiegarmi bene.
    Creo da programma un TextBox e lo metto nel PlaceHolder. E questo nell'evento load della pagina.
    Vorrei, durante la creazione del textbox, e prima di inserirlo nel PlaceHolder, recuperare l'attributo Text dal ViewState.

    Pietro

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    204
    Non vorrei dire un'idiozia e se è possibile con qualche tecnica particolare, ma per poterne ancora prendere il valore lo devi inserire nella pagina in modo che "esso" si riprenda il valore dal viewstate.

    Un'altra strada, essendo eseguito il postback, e cercare di prenderne il valore come se fosse un input type text qualsiasi:

    testo=Request("nome_campo_textbox")

    E' una cosa curiosa comunque, se scopri qualcosa fai sapere!

    Ciao

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non sono riuscito a risolvere come vorrei ma, visto che sei interessato, ti dico come ho cercato di risolvere.
    Prima di tutto il problema.
    Ho realizzato un UserControl, che serve come filtro per interrogare tabelle di database. Lo puoi immaginare come una tabella le cui righe contengono 4 colonne:
    1) nome del campo
    2) dropdown operatori (=, <>, >, <, tra, nullo, ....)
    3) textbox1
    4) textbox2

    Adesso, il textbox2, è visibile solo se l'operatore è tra (beetween) e, textbox1 è visibile solo se l'operatore non è nullo o non nullo.

    Io ho risolto modificando lo stile visibility nel client (e funziona).

    Però, visto che i controlli sono generati nel server, mi chiedo se non sia possibile risolvere tutto nel server.

    Allora, mi sono creato un semplice UserControl per prova. Questo UserControl crea da programma due textbox, e rende visibile o meno il secondo text box a seconda che l'utente scriva qualcosa o meno nel primo.

    Il codice è moltro più chiaro delle mie parole.
    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            crea()
    
        End Sub
    
        Private Sub crea()
            Dim tb As TextBox
    
            tb = New TextBox
            tb.ID = "tb1"
    
            'recupero il nome del textbox
            Dim nc$ = Me.UniqueID & ":" & tb.UniqueID
    
            'recupero il suo value dalla collezione Form
            Dim vnc$ = Trim(Me.Request.Form(nc))
    
            PrintLn(vnc, nc)
    
    
            Me.PlaceHolder1.Controls.Add(tb)
    
            tb = New TextBox
            tb.ID = "tb2"
    
            'qui modifico un attributo del secondo textbox
            'in base al value del primo
            If vnc = "" Then
                tb.Attributes.Add("style", "visibility:hidden;")
            Else
                tb.Attributes.Add("style", "visibility:visible;")
            End If
            Me.PlaceHolder1.Controls.Add(tb)
    
        End Sub
    Per funzionare, funziona. Ma secondo me esiste qualche metodo nativo per fare ciò senza interrogare la collezione Form.

    Pietro

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    204
    Invece degli attributi style, puoi utilizzare direttamente la property visible del textbutton:

    If vnc = "" Then
    tb.Visible=false
    end if

    E per sapere il nome client del textbox puoi usare:
    Dim nc$ =tb.ClientId

    Mi sa che altre soluzioni siano leggermente più complesse... Il gioco vale la candela?

    Scherzi a parte, se scopri qualcosa...

    Ciao

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da Alchimista
    Invece degli attributi style, puoi utilizzare direttamente la property visible del textbutton:

    If vnc = "" Then
    tb.Visible=false
    end if

    E per sapere il nome client del textbox puoi usare:
    Dim nc$ =tb.ClientId

    Mi sa che altre soluzioni siano leggermente più complesse... Il gioco vale la candela?

    Scherzi a parte, se scopri qualcosa...

    Ciao
    Dunque, ho utilizzato un semplice esempio perchè non posso spedire centinaia di righe di codice e pretendere che qualcuno le legga

    Il gioco ne vale sicuramente la candela. Un userControl ben fatto, infatti, è una scatola chiusa con tutto il codice dentro. Quando lo utilizzi in più pagine, ti risparmi molto codice. In altre parole, è un buon investimento.

    SOLUZIONE
    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Inserire qui il codice utente necessario per inizializzare la pagina
            crea()
    
        End Sub
    
        Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)
            MyBase.OnPreRender(e)
    
            Dim tb1 As TextBox = DirectCast(Libreria.FindControlRecursive(Me.PlaceHolder1, "tb1"), TextBox)
            Dim tb2 As TextBox = DirectCast(Libreria.FindControlRecursive(Me.PlaceHolder1, "tb2"), TextBox)
    
            Dim vnc$ = tb1.Text
    
            If vnc = "" Then
                tb2.Attributes.Add("style", "visibility:hidden;")
            Else
                tb2.Attributes.Add("style", "visibility:visible;")
            End If
    
        End Sub
    
        Private Sub crea()
            Dim tb As TextBox
    
            tb = New TextBox
            tb.ID = "tb1"
            Me.PlaceHolder1.Controls.Add(tb)
    
            tb = New TextBox
            tb.ID = "tb2"
    
            Me.PlaceHolder1.Controls.Add(tb)
    
        End Sub
    Pietro

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    204
    La scatola rimane chiusa anche se utilizzi il request.form con il control.ClientID....

    Il FindControlRecursive cerca i control all'interno della pagina, e il tuo scopo è prenderne i valori...

    Ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.