Io sto impazzendo...non so come fare a salvare il viewstate di questi benedetti controlli.
Ti posto il codice e vedi se riesci a darmi una mano....
Questo è il mio composite control con supporto al design view.
Praticamente è un pop up contenitore di altri controlli asp.
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.Design.WebControls;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Runtime.Serialization;
namespace ManagementModalFormPopUp
{
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
[Designer(typeof(ModalFormContainerControlDesigner))]
[ParseChildren(true)]
public class ModalFormContainerControl : CompositeControl
{
private Panel dialogModalForm;
private ITemplate containerTemplate;
private Control containerControl;
[Browsable(false),
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate ItemTemplate
{
get
{
return containerTemplate;
}
set
{
containerTemplate = value;
}
}
public ModalFormContainerControl()
{
}
protected override void CreateChildControls()
{
//This is where the ItemTemplate is created
containerControl = new Control();
dialogModalForm = new Panel();
dialogModalForm.ID = "dialogModalForm";
Controls.Add(dialogModalForm);
if (ItemTemplate != null)
{
ItemTemplate.InstantiateIn(containerControl);
}
dialogModalForm.Controls.Add(containerControl);
}
internal void GetDesignTimeHtml()
{
this.EnsureChildControls();
}
protected override void OnInit(System.EventArgs e)
{
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_132"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_132", Page.ResolveClientUrl("~/js/jquery/jquery-1.3.2.js"));
}
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_uicore"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_uicore", Page.ResolveClientUrl("~/js/jquery/ui/ui.core.js"));
}
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_uidraggable"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_uidraggable", Page.ResolveClientUrl("~/js/jquery/ui/ui.draggable.js"));
}
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_uiresizable"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_uiresizable", Page.ResolveClientUrl("~/js/jquery/ui/ui.resizable.js"));
}
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_uidialog"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_uidialog", Page.ResolveClientUrl("~/js/jquery/ui/ui.dialog.js"));
}
if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(ModalFormContainerControl), "includeScriptJquery_bgiframe"))
{
Page.ClientScript.RegisterClientScriptInclude(typeof(ModalFormContainerControl), "includeScriptJquery_bgiframe", Page.ResolveClientUrl("~/js/jquery/external/bgiframe/jquery.bgiframe.js"));
}
HtmlHead head = (HtmlHead)Page.Header;
HtmlLink link = new HtmlLink();
link.Attributes.Add("href", Page.ResolveClientUrl("~/Dialog/css/jquery/ModalForm/jquery-ui-1.7.2.custom.css"));
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
head.Controls.Add(link);
base.OnInit(e);
}
public void ShowModalForm(Page pagina, Type type, string ConteinerClientID, string TitleModalForm,Button ButtonOK)
{
string script = "";
script += "<script type=\"text/javascript\">";
script += " $(function () {";
script += "$(\"#" + ConteinerClientID + "\").dialog({";
//script += " $(\"#ctl00_ContentPlaceHolderMain_PanelFormInsUtente_ContenutoInsUser\").dialog({";
script += " bgiframe: true,";
script += " modal: true,";
script += " resizable: true,";
script += " draggable: true,";
script += " title:\"SorpassoWeb - " + TitleModalForm + "\",";
script += " buttons: {";
script += " 'OK': function() {";
string PostBackEvent = pagina.ClientScript.GetPostBackEventReference(ButtonOK, string.Empty);
script += PostBackEvent + ";";
script += " },";
script += " 'Annulla': function() {";
script += " __doPostBack('dialogConfirm@no', '');";
script += "";
script += " }";
script += " }";
script += "});";
//script +="}";
script += "});";
script += "</script>";
pagina.ClientScript.RegisterClientScriptBlock(type, "ShowModalFormInsUser", script);
}
}
public class ModalFormContainerControlDesigner :ContainerControlDesigner
{
private Style _style = null;
// Add the caption by default. Note that the caption
// will only appear if the Web server control
// allows child controls rather than properties.
public override string FrameCaption
{
get
{
return "ModalForm ContainerControlDesigner";
}
}
public override Style FrameStyle
{
get
{
if (_style == null)
{
_style = new Style();
_style.Font.Name = "Verdana";
_style.Font.Size = new FontUnit("XSmall");
_style.BackColor = Color.LightBlue;
_style.ForeColor = Color.Black;
}
return _style;
}
}
public ModalFormContainerControlDesigner()
{}
TemplateGroupCollection col = null;
public override void Initialize(IComponent component)
{
// Initialize the base
base.Initialize(component);
// Turn on template editing
SetViewFlags(ViewFlags.TemplateEditing, true);
}
// Add instructions to the placeholder view of the control
public override string GetDesignTimeHtml()
{
//First, ensure that the DialogBox creates child components
ModalFormContainerControl ctl = (ModalFormContainerControl)this.Component;
ctl.GetDesignTimeHtml();
return base.GetDesignTimeHtml();
}
public override TemplateGroupCollection TemplateGroups
{
get
{
if (col == null)
{
// Get the base collection
col = base.TemplateGroups;
// Create variables
TemplateGroup tempGroup;
TemplateDefinition tempDef;
ModalFormContainerControl ctl;
// Get reference to the component as TemplateGroupsSample
ctl = (ModalFormContainerControl)Component;
// Create a TemplateGroup
tempGroup = new TemplateGroup("ItemTemplate");
// Create a TemplateDefinition
tempDef = new TemplateDefinition(this, "ItemTemplate",
ctl, "ItemTemplate", true);
// Add the TemplateDefinition to the TemplateGroup
tempGroup.AddTemplateDefinition(tempDef);
col.Add(tempGroup);
}
return col;
}
}
// Allow the control to be resized, regardless of templatemode or not.
public override bool AllowResize
{
get
{
return true;
}
}
}
}
dalle pagine lo instanzio in questo modo
<%@ Register Assembly="ModalFormPopUp" Namespace="ManagementModalFormPopUp" TagPrefix="PopUpGestDati" %>
<PopUpGestDati:ModalFormContainerControl EnableViewState="true" ID="PanelFormInsUtente" runat="server"
>
<ItemTemplate>
<asp:Panel ID="ContenutoInsUser" runat="server">
<asp:TextBox ID="txt_input" runat="server"></asp:TextBox>
</asp:Panel>
</ItemTemplate>
</PopUpGestDati:ModalFormContainerControl>
Il pop up una volta aperto ha un bottone ok.
Quando viene cliccato ok viene prodotto un postback che ritorna sulla pagina principale.
protected Button SalvaUtente;
protected override void OnInit(EventArgs e)
{
//Generazione Bottoni di Salvataggio
SalvaUtente = new Button();
SalvaUtente.ID = "ButtonSalvaUtente";
SalvaUtente.Text = "OK";
if (Request.Browser.Browser.ToUpper().IndexOf("IE") < 0)
{
SalvaUtente.Style["display"] = "";
}
else
{
SalvaUtente.Style["display"] = "none";
}
PanelBottoniOperazioniDati.Controls.Add(SalvaUtente);
SalvaUtente.Click += new EventHandler(this.SalvaUtente_Click);
base.OnInit(e);
}
protected void SalvaUtente_Click(object sender, EventArgs e)
{
string testo = ((TextBox)PanelFormInsUtente.Controls[0].Controls[0].FindControl("ContenutoInsUser").FindControl("txt_input")).Text;
}
Quando arrivo su SalvaUtente_Click la mia textbox è sempre vuota.
Io lo usercontrol lo ricarico sempre ed ho la prova che dopo il postback della pagina viene richiamato lìevento createchildcontrol.
E allora perchè non salva il viestate dei controlli figli (textbox ad esemio)?.
che cosa devo fare?
Gestire il save e Loadviewstate all'interno del CompositeControl?
Ti prego dammi un idea....