Problema con controlli creati a runtime

mercoledì 09 gennaio 2008 - 00.34

chavez Profilo | Newbie

Ciao a tutti,

ho il seguente problema.
In una pagina ASP.NET 2.0 ho un web user control (ParentControl.ascx) composto da una serie di linkbutton e un placeholder.
A seconda del linkbutton premuto voglio far apparire nel placeholder un web user control diverso, caricato a runtime.
Il primo problema nasce quando, al postback con il controllo 1 (creato premendo il primo linkbutton) non so come capire se il controllo 1 era stato creato o meno. Ovvero: al postback, come faccio a sapere se uno dei controlli dinamici è stato creato prima del postback o meno?
Il secondo problema è il seguente.
In uno di questi controlli creati dinamicamente ho una label il cui testo cambia in base alla pressione di un pulsante (sempre del controllo dinamico). Quello che noto è che la prima pressione del pulsante che dovrebbe cambiare la scritta in realtà non la cambia, (anche si vede che se viene eseguito un postback). Ovvero:
- prima della pressione del pulsante il controllo dinamico (che si chiama ChildControl.ascx) è:
Label
[pulsante alfa] [pulsante beta]
- premendo "pulsante alfa" avviene un postback ma ottengo nuovamente:
Label
[pulsante alfa] [pulsante beta]
- premendo di nuovo "pulsante alfa" ottengo finalmente:
Alfa <---- Label cambiata
[pulsante alfa] [pulsante beta]

Il ParentControl1.ascx è questo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il ParentControl1.ascx.cs è questo:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class ParentControl : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { if (IsPostBack == true) { if (ViewState["SelectedControl"] != null) { switch (ViewState["SelectedControl"].ToString()) { case "Control1": PlaceHolder1.Controls.Add(LoadControl("ChildControl.ascx")); break; case "Control2": PlaceHolder1.Controls.Add(LoadControl("ChildControl2.ascx")); break; } } } } protected void LinkButton1_Click(object sender, EventArgs e) { Control ctrl = LoadControl("ChildControl.ascx"); PlaceHolder1.Controls.Clear(); PlaceHolder1.Controls.Add(ctrl); ViewState["SelectedControl"] = "Control1"; } protected void LinkButton2_Click(object sender, EventArgs e) { Control ctrl = LoadControl("ChildControl2.ascx"); PlaceHolder1.Controls.Clear(); PlaceHolder1.Controls.Add(ctrl); ViewState["SelectedControl"] = "Control2"; } }

Nel placeholder1 del ParentControl possono essere creati i controlli ChildControl1 o ChildControl2.
Il codice di ChildControl1.ascx:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice di ChildControl1.ascx.cs:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class ChildControl : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } protected void btnAlfa_Click(object sender, EventArgs e) { Label1.Text = "Alfa"; } protected void btnBravo_Click(object sender, EventArgs e) { Label1.Text = "Bravo"; } }

Il codice di ChildControl2.ascx:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice di ChildControl2.ascx.cs:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class ChildControl2 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } protected void btnQui_Click(object sender, EventArgs e) { Label1.Text = "Qui"; } protected void btnQuo_Click(object sender, EventArgs e) { Label1.Text = "Quo"; } protected void btnQua_Click(object sender, EventArgs e) { Label1.Text = "Qua"; } }

Grazie dell'aiuto.
Federico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5