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

    FindControl da un placeholder

    Ciao ragazzi,
    scusatemi ma sto impazzendo!!!

    Ho un placeholder che mi carica un file .ascx.
    All'interno di questo file c'è un form di ricerca con un pulsante che ha attivato il postbackurl su di un'altra pagina.
    In quest'altra pagina al load ho impostato:

    codice:
            Dim MioPLC As Control
            MioPLC = PreviousPage.Controls(0).FindControl("PlcRicerca")
           
            Dim TestoAutore As TextBox
            TestoAutore = CType(MioPLC.FindControl("TxtAutore"), TextBox)
            
            
    TxtAutoreHidden.Text = TestoAutore.Text
    
    Mi restituisce errore sulla riga che ho messo ingrassetto.
    Il placeholder lo recupera correttamente, in quanto ho provato a mostrare l'id del placeholder recuperato e va tutto ok, quindi mi sa che sbaglio a recuperare il campo di testo presente nel placeholder... ma davvero non so dove sbaglio.

    Sapete aiutarmi?
    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Per completazza qualè l'errore ?

  3. #3
    L'errore è il seguente:
    Riferimento a un oggetto non impostato su un'istanza di oggetto

    per la riga che ho evidenziato in grassetto

  4. #4
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Sicuramente il problema è nel secondo FindControl ...

    Prova ad utilizzare questo piccolo esempio per stamparti in modo ricorsivo tutti i webControl che si trovano all'interno del placeHolder per vedere effetivamente quali controlli riesci a caricare con la prima operazione di ricerca ...


    aspx.cs
    codice:
    protected void Page_Load(object sender, EventArgs e)
            {
                PlaceHolder PlaceHolderCtrl = (PlaceHolder)Page.FindControl("PlaceHolder1");
    
                this.readControls(PlaceHolderCtrl);
                     
            }
    
            private void readControls(Control ctrl)
            {
                if (ctrl == null) return;
    
                Label1.Text += "
    Tipo :" + ctrl.GetType().ToString() + " [ID : " + ctrl.ID + "]";
                foreach (Control _ctrl in ctrl.Controls)
                {
                    this.readControls(_ctrl);
                }
            
            }
    aspx
    codice:
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server">
                <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                </asp:CheckBoxList>  
                <asp:RadioButton ID="RadioButton1" runat="server" />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </asp:PlaceHolder>
        <asp:label ID="Label1" runat="server" text="Label"></asp:label>
        </div>
        </form>
    </body>
    scusami se nn ti posto il codice in vb ma ne sono proprio all'asciutto ...

  5. #5
    Dunque ho provato il tuo codice così come l'hai scritto, convertendolo solo in Vb.NET, ma al caricamento di questa pagina di prova non mi stampa nulla nel campo label1.
    Mi mostra solo gli elementi presenti nel placeholder...

  6. #6
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Hai provato questo coice
    codice:
    If PreviousPage IsNot Nothing Then
        If PreviousPage.IsCrossPagePostBack = True Then
             Label1.Text = "Cross-page post."
        End If
    Else
        Label1.Text = "Not a cross-page post."
    End If
    per vedere se davvero sei in un cross page ?

    http://msdn.microsoft.com/it-it/library/ms178139.aspx

  7. #7
    Gabbone perdonami, ti ringrazio molto per l'aiuto ma mi sto un attimo perdendo...

    L'esempio che mi hai postato all'inizio io l'ho provato su di una singola pagina che ho chiamato test.aspx, e l'ho semplicemente lanciata e aggiornata per vedere se al caricamento della pagina riconosceva i controlli presenti nel placeholder.

    Che c'entra adesso il crossposting se sto lavorando su di una singola pagina come nell'esempio che mi fai fatto?

    Grazie mille

  8. #8
    Utente di HTML.it L'avatar di GabbOne
    Registrato dal
    Mar 2006
    Messaggi
    577
    Allora prima di tutto perdonami se sono stato sintetico prima ma con il lavoro tra i piedi diventa tutto molto difficile

    Allora torniamo al primo esempio in cui testiamo semplicemente una lettura ricorsiva di webControl annidati tra loro (Il tutto in una singola pagina)
    Nella pagina aspx abbiamo
    codice:
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server">
                <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                </asp:CheckBoxList>  
                <asp:RadioButton ID="RadioButton1" runat="server" />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </asp:PlaceHolder>
        <asp:label ID="Label1" runat="server" text="Label"></asp:label>
        </div>
        </form>
    </body>
    nel code cerchiamo quindi di caricare il placheHolder con il Page.FindControl("IdControllo") e di leggere ricorsivamente i webcontrol in esso annidati

    codice:
    protected void Page_Load(object sender, EventArgs e)
            {
                PlaceHolder PlaceHolderCtrl = (PlaceHolder)Page.FindControl("PlaceHolder1");
    
                this.readControls(PlaceHolderCtrl);
                     
            }
    
            private void readControls(Control ctrl)
            {
                if (ctrl == null) return;
    
                Label1.Text += "
    Tipo :" + ctrl.GetType().ToString() + " [ID : " + ctrl.ID + "]";
                foreach (Control _ctrl in ctrl.Controls)
                {
                    this.readControls(_ctrl);
                }
            
            }
    Questo script lo scritto e testato prima di postarlo e ti faccio vedere anche l'output che dovrebbe darti

    Tipo :System.Web.UI.WebControls.PlaceHolder [ID : PlaceHolder1]
    Tipo :System.Web.UI.WebControls.CheckBoxList [ID : CheckBoxList1]
    Tipo :System.Web.UI.WebControls.CheckBox [ID : 0]
    Tipo :System.Web.UI.WebControls.RadioButton [ID : RadioButton1]
    Tipo :System.Web.UI.WebControls.TextBox [ID : TextBox1]

    Il secondo esempio che ti ho postato invece , come puoi vedere dalla pagina msdn , spiega come sia possibile utlizzare il PreviousPage solo nel caso in cui l'elaborazione sia passata alla pagina corrente mediante un server.Transfet("url") oppure ci si trovi una condizione di crossposting.
    Io sinceramente lo testato solo con il server.Transfert e mi funziona benissimo , ti posto qui l'esempio in cui cè la prima pagina che contiene i webControl da leggere e la seconda che contiene il codice per leggerli in modo ricorsivo

    1.
    codice:
    //AsPx
        <form id="form1" runat="server">
        <div>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server">
                <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                </asp:CheckBoxList>  
                <asp:RadioButton ID="RadioButton1" runat="server" />
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            </asp:PlaceHolder>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" 
                style="height: 26px" />
        </div>
        </form>
    //AsPx.Cs
    protected void Button1_Click(object sender, EventArgs e){
                Server.Transfer("~/Default2.aspx");
            }
    2.
    codice:
    //AsPx
        <form id="form1" runat="server">
        <div>
        <asp:label ID="Label1" runat="server" text="Label"></asp:label>
        </div>
        </form>
    //AsPx.Cs
     protected void Page_Load(object sender, EventArgs e)
            {
                PlaceHolder PlaceHolderCtrl = (PlaceHolder)PreviousPage.FindControl("PlaceHolder1");
                readControls(PlaceHolderCtrl);
    
            }
    
            private void readControls(Control ctrl)
            {
                if (ctrl == null) return;
    
                Label1.Text += "
    Tipo :" + ctrl.GetType().ToString() + " [ID : " + ctrl.ID + "]";
                foreach (Control _ctrl in ctrl.Controls)
                {
                    this.readControls(_ctrl);
                }
    
            }
    Non so se questo che ti ho detto possa essereti di aiuto ma può essere utilie per capire come prelevare i webControl mediante la PreviousPage ..


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.