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 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 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 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