Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285

    [VB.Net] Problema con user control

    Salve a tutti.. sono due giorni che sbatto la testa in una cavolata che mi sta facendo impazzire..

    L'utilizzo di user control!

    fin ora avevo utilizzato user control solo per accorgimenti grafici con qualche link statico adesso sto provando gli stessi con un po di codice ed ecco arrivare i problemi.

    in una pagina index.aspx carico un user control in un placeholder con successo ma quando devo scambiare informazioni tra di loro ovviamente vi è qualche problema..

    posto l'esempio, nel page load della pagina index.aspx ho:

    codice:
     mioPlaceHolder.Controls.Add(LoadControl("uc_accesso.ascx"))

    menter l'user control..

    codice:
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="uc_accesso.vb" Inherits="WebUserControl" %>
    <asp:ImageButton ID="btn_accedi" runat="server" onclick="btn_accedi_Click" />
    e nel suo codice vb ho..

    codice:
    Partial Class WebUserControl
        Inherits System.Web.UI.UserControl
    
        Protected Sub btn_accedi_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_accedi.Click
    
    
    '**QUI VORREI RICHIAMARE UN ALTRO USER CONTROL LAVORANDO SUL PLACEHOLDER DELLA PAGINA INDEX.ASPX
    
    'una cosa tipo  'placeHolderdellapaginacheospita.Controls.Add(LoadControl("secondo_controllo.ascx"))
    End Sub
    End Class
    [/code]

    come faccio a richiamare il placeholder della pagina iniziale per cambiare user control?


    per voi sarà una vacolata ma io ci sto sbattendo la testa..

    Grazie!

  2. #2
    io metterei gli usercontrol nel file aspx e solo li renderei visibili o meno dal "code behind"
    Fiore Bat - www.bcscommunity.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    penso che nella pagina devi mettere i placheolder public,
    dopo di che nel controllo, fai il cast della property Page al tipo effetivo della pagina.

    Cioe se la pagina ha associala la classe MiaPagina, nel controllo scriverai:


    dim paginaBase as MiaPagina = me.Page

    paginaPase.riferimentoAlPlaceHolder.Controls.Add( ... )

    spero di essermi spiegato!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    Intanto grazie ad entrambi per le risposte!

    x FiOrEbAt

    soluzione molto sbrigativa la tua.. potrebbe essere un idea per tamponare ma a livello di risorse come la mettiamo? nello stesso placeholder caricherò anche altri UC, credo che la pagina ne risentirebbe.. o no?


    stefanomnn

    sul discorso di mettere il paceholder public ci ho pensato ma non ho ancora capito bene come fare..
    ora provo..


    Tuttavia ho notato che se clicco sul pulsante presente nell'usercontrol... l'usercontrol sparisce dal placeholder voi come gestite sti usercontrol???

    grazie ancora!

  5. #5
    pesante in che senso? i controlli lato server con visible = false non ci sono nell'html, quindi la pagina è pesante uguale
    Fiore Bat - www.bcscommunity.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    Nel frattempo che attendevo risposte.. stufo di vedere errori.. ho adottato più o meno la tua soluzione..

    varie parti in in un paio di updatepanel che rendo visibili e invisibili da codice...

    quindi niente usercontrol.. niente placeholder e di conseguenza quindi niente perdita di stato!

    me ne frego delle burocrazie!


    l'importante è che funziona



    Grazie per il consiglio illuminate!

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Comunque il controllo degli UC (aggiunta di uno ad un PH, ad esempio) di solito si fa dalla pagina.

    Il trucco sta nel rendere pubblico l'evento click interno allo usercontrol, in modo da poterlo rilevare e gestire dalla pagina. Esempio:

    drop.ascx
    codice:
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="drop.ascx.vb" Inherits="WebUserControl" %>
    
    <asp: DropDownList Runat="server" ID="ddPersone" AutoPostBack="True">
    <asp:listItem>Persona1</asp:listItem>
    <asp:listItem>Persona2</asp:listItem>
    <asp:listItem>Persona3</asp:listItem>
    </asp: DropDownList>

    drop.ascx.vb
    codice:
        Public ReadOnly Property TestoDD() As String
            Get
                Return ddPersone.SelectedItem.Text.ToString
            End Get
        End Property
    
        Public Event SceltaCambiata(ByVal s As Object, ByVal e As EventArgs)
    
        Private Sub ddPersone_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddPersone.SelectedIndexChanged
            RaiseEvent SceltaCambiata(Me, e)
        End Sub

    Nella pagina che ospita il controllo UC basta poi fare:
    codice:
        Private Sub istanzaUC_SceltaCambiata(ByVal s As Object, ByVal e As System.EventArgs) Handles istanzaUC.SceltaCambiata
            Response.Write("Dalla DROPDOWN nello UC hai scelto il testo: " & istanzaUC.TestoDD.ToString)
        End Sub
    nel tuo caso invece di una drop ed il suo evento SelectedIndexChanged, c'e' un bottone con il click...(e poi una 'ripulita' dei controlli del placeholder e l'aggiunta del nuovo)

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    285
    beh.. grazie djciko,

    per ora con il vecchio sistema funziona bene e mi sembra male smontarlo ma mi sei stato molto utile.. finalmente credo di aver capito

    farò comunque delle prove

    Grazie

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.