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

    Accedere alle prorpietà pubbliche di Page da uno UserControl

    Ciao a tutti. si può fare quanto suddetto? io sono riuscito ad accedere alle istanze degli elemnti di UI dallo user control, ad esempio per accedere al datagrid contenuto nella pagina principale, nell'evento Page_Load del controllo ho scritto Page.FindControl("mioDatagrid").
    Io vorrei però accedere alle proprietà pubbliche che non hanno un'istanza nell'interfaccia utente, ma sono proprietà dell'istanza della pagina, sarebbe in particolare:

    public dvListino As DataView

    è possibile intercettarne il valore dallo usercontrol?

    ciao
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    dallo UC puoi accedere alla collection controls oppure trovare un controllo con FindControl...Credo che per fare quello che dici l'unico metodo (non ho provato pero') sia mettere l'oggetto che ti serve in sessione e dallo UC fare Me.Page.Session("nomeoggetto")

    prova e fammi sapere...

  3. #3

    si fa semplicemente così

    'ES. nel page load del controllo
    codice:
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
           ' determino il tipo in base al nome della classe della pagina aspx
            Dim p As myRoot.listaClienti         
    
            '  associo alla variabile l'istanza della pagina 
            '  restituita dal metodo Page del controllo
            p = Me.Page         
    
            ' ora posso fare riferimento all'istanza della pagine e le sue proprietà
            p.nomeProp 
    
            If Not Page.IsPostBack Then
                showList()
                '.....
            End If
    
        End Sub
    Ciao
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  4. #4
    Ciao,
    non ho capito cosa fai così, cos'è MyRoot?

    E' un controllo della pagina o dello UC?

    e facendo p=Me.Page cosa fai?

    Giulio

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Mi sono incuriosito alla domanda, ed anche ad alcune risposte.
    Ho fatto questo piccolo esempio.
    Una pagina di prova ha un semplice segnaposto che ospiterà un UserControl creato da codice:

    <asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>

    il codice, contiene una proprietà pubblica ed un metodo pubblico:
    codice:
    'variabile di classe che referenzia il controllo utente WebUserControl1
    Protected WithEvents uc As WebUserControl1
    
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    	'creo il controllo utente dinamicamente
    	uc = DirectCast(LoadControl("WebUserControl1.ascx"), WebUserControl1)
    
    	'lo inserisco nel segnaposto
    	Me.PlaceHolder1.Controls.Add(uc)
    
    End Sub
    
    'una proprietà pubblica di prova
    Public ReadOnly Property Proprieta() As String
    	Get
    		Return "Hai interrogato il valore di una proprietà pubblica nella pagina contenitrice"
    	End Get
    End Property
    
    'un metodo pubblico di prova
    Public Function Metodo(ByVal parametro As String) As String
    	Return "Hai interrogato il valore di una funzione pubblica nella pagina contenitrice: parametro passato = " & parametro
    End Function
    Adesso vediamo l'UC
    codice:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    	'riferimento alla pagina contenitrice
    	Dim p As System.Web.UI.Page = Me.Page
    
    	'ricavo il tipo
    	Dim type As Type = p.GetType()
    
    	'se esiste la proprietà pubblica, ne invoco il valore
    	Dim pi As PropertyInfo = type.GetProperty("Proprieta")
    	If Not (pi Is Nothing) Then
    		Me.Response.Write(pi.GetValue(p, Nothing).ToString() & "</br>")
    	End If
    
    	'se esiste il metodo pubblico, lo lancio, passando il giusto parametro
    	Dim mi As MethodInfo = type.GetMethod("Metodo")
    	If Not (mi Is Nothing) Then
    		Me.Response.Write(mi.Invoke(p, New Object() {"PARAMETRO1"}).ToString() & "</br>")
    	End If
    
    
    End Sub
    Da notare che, probabilmente, l'UC non sa e non vuole sapere niente sulla pagina che lo ospiterà, perciò, l'invocazione di metodi della pagina contenitrice saranno fatte col late binding utilizzando la reflection.

    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.