111 messaggi dal 28 marzo 2001
Buongiorno a tutti, ho una pagina, che deriva da una master page, con all'interno un controllo Wizard.
Negli step del wizard carico degli UserControl.
Avrei la necessità di caricare gli UserControl da codice, perchè potrebbero essere diversi in base a certe condizioni.
Sono riuscita a trovare dei campi in comune a tutti i tipi di usercontrol e volevo sapere se era possibile creare lo usercontrol di base e, nella page_load del wizard, in base a certe condizioni, caricare lo usercontrol derivato.
Lo user control di base avrà i suoi metodi che non dovrò riportare in quello derivato se non facendo un override e gestendo, dove serve, le differenze, giusto?
Nello user control derivato, devo comunque mettere nell'html i controlli dello user control base?

Spero di essermi spiegata.

Grazie.

Mirella
652 messaggi dal 21 gennaio 2007
Contributi
Ciao !
Allora, per caricare uno user control da codice all'interno della tua pagina, puoi leggerti questo:
http://www.aspitalia.com/script/481/Aggiungere-User-Control-LoadControl.aspx

Invece, per quanto riguarda il resto, puoi avere una situazione di questo genere:

Figlio.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Figlio.ascx.cs" Inherits="Progetto.Figlio" %>


Figlio.ascx.cs
namespace Progetto
{
    public partial class Figlio : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("ciao");
        }
    }
}


Padre.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Padre.ascx.cs" Inherits="Progetto.Padre" %>
<asp:Button ID="btn" runat="server" Text="click me" />


Padre.ascx.cs
namespace Progetto
{
    public partial class Padre : Figlio
    {        
    }
}


Così, i controlli e gli elementi html però sono visibili solo quelli dello user control Padre, mentre la parte di code-behind viene eseguita quella dello user control Figlio.

Però secondo me, ti conviene creare dei controlli custom senza utilizzare gli user control
111 messaggi dal 28 marzo 2001
perchè la classe padre deriva dal figlio e non viceversa?

public partial class Padre : Figlio
{
}

e

public partial class Figlio : System.Web.UI.UserControl
{
}

pensavo che il padre ereditasse da System.Web.UI.UserControl e il figlio dal Padre.
Il click del pulsante dello user control padre lo gestisco nel code behind del padre anche per il figlio? Che vantaggi ho a creare dei controlli custom anzichè utilizzare gli user control?

grazie

Mirella
652 messaggi dal 21 gennaio 2007
Contributi
si, logicamente è il contrario.. mi son confuso.. ma alla fine se ci pensi bene, sono solo dei nomi..

l'evento click lo puoi gestire in entrambi i code-behind, tanto uno eredita dall'altro e se gestisci l'event handler come pubblico allora non hai problemi.

con i controlli server hai un maggiore controllo sull'ereditarietà e sui controli che il tuo deve contenere. come hai visto prima, nello user control che io ho chiamato Figlio, non ho messo alcun controllo.. mentre se ti sviluppi un server control ad hoc, puoi metterci tutti i controlli che vuoi e farli ereditare da altri controlli
111 messaggi dal 28 marzo 2001
PeppeDotNet ha scritto:
si, logicamente è il contrario.. mi son confuso.. ma alla fine se ci pensi bene, sono solo dei nomi..
nessun problema, volevo accertarmi di aver capito bene la logica

l'evento click lo puoi gestire in entrambi i code-behind, tanto uno eredita dall'altro e se gestisci l'event handler come pubblico allora non hai problemi.

vediamo se riesco a combianare qualcosa. Grazie per il supporto

Mirella
111 messaggi dal 28 marzo 2001
ho creato il mio usercontrol padre:
namespace Societa.ProgettoWeb
{
namespace UserControlBase
{
public partial class UserControl_DatiIdentificativiBase : System.Web.UI.UserControl
{
public virtual string GetUI()
{
string _retval
_retval = textbox1.text;
return _retval;
}
}
}
}

ho creato il mio usercontrol figlio:
namespace Societa.ProgettoWeb
{
public class UserControl_DatiIdentificativi : UserControlBase.UserControl_DatiIdentificativiBase
{
public override string GetUI()
{
string _retval;
// richiamo la getui della classe base
_retval= base.GetUI();

return _retval;
}
}
}

nella pagina che contiene il controllo wizard ho messo nel primo step un PlaceHolder (phWizardStep1) e da codice ho scritto:
protected void Page_Load(object sender, EventArgs e)
{

//if (!Page.IsPostBack)
//{
switch (ModelloUserControl)
{
case "A":
UControl = (UserControl_DatiIdentificativi)Master.LoadControl(@"~\UserControl\DatiIdentificativi.ascx");
phWizardStep1.Controls.Add(UControl);
break;
}
//}
}

non mi da errori in compilazione, ma quando chiamo la pagina del wizard mi restituisce questo errore:The type or namespace name 'UserControl_DatiIdentificativi' could not be found (are you missing a using directive or an assembly reference?)

Domanda: devo mettere nella pagina che contine il wizard la riga dello usercontrol ? <%@ Register Src="~/UserControl/DatiIdentificativiBase.ascx" TagName="DatiIdentificativiBase" TagPrefix="uc3" %>

Grazie per il supporto

Mirella
652 messaggi dal 21 gennaio 2007
Contributi
no, se carichi lo user control da codice, non c'è bisogno di registrarlo a livello di pagina.

controlla che le due classi padre e figlio siano sotto lo stesso namespace
secondo il codice che hai scritto

namespace Societa.ProgettoWeb 
{ 
namespace UserControlBase 
{ 
public partial class UserControl_DatiIdentificativiBase : System.Web.UI.UserControl 
{ 
public virtual string GetUI() 
{ 
string _retval 
_retval = textbox1.text; 
return _retval; 
} 
} 
} 
} 

qual'è il namespace ? Societa.ProgettoWeb o UserControlBase ?
beh, questo deve essere lo stesso del controllo figlio.
111 messaggi dal 28 marzo 2001
adesso sono entrambe sotto lo stesso namespace Societa.ProgettoWeb, ma l'errore continua a verificarsi nella pagina che contiene il controllo wizard:

protected void Page_Load(object sender, EventArgs e)
{

//if (!Page.IsPostBack)
//{
switch (ModelloUserControl)
{
case "A":
UControl = (Societa.ProgettoWeb.UserControl_DatiIdentificativi)Master.LoadControl(@"~\UserControl\DatiIdentificativi.ascx");
phWizardStep1.Controls.Add(UControl);
break;
}
//}
}

devo per caso mettere anche questa sotto il namespace Societa.ProgettoWeb o fare la using del namespace? sono pagine dello stesso progetto web
ma i namespace sono necessari?
Modificato da Mirella il 28 luglio 2008 14.51 -

Mirella

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.