1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
namespace CSLib.Web.UI
{
public class Page : System.Web.UI.Page
{
#region "Constructor"
public Page()
{
this.Init += new EventHandler(Page_Init);
}
#endregion
#region "Property"
private Boolean renderOnlyPage = false;
/// <summary>
/// if true, the page would render only ContentPlaceHolder
/// </summary>
public Boolean RenderOnlyPage
{
get { return renderOnlyPage; }
set { renderOnlyPage = value; }
}
private string renderOnlyOneContentPlaceHolder = string.Empty ;
public string RenderOnlyOneContentPlaceHolder
{
get { return renderOnlyOneContentPlaceHolder; }
set { renderOnlyOneContentPlaceHolder = value; }
}
#endregion
/// <summary>
/// List of ContentPlaceHolder
/// </summary>
private List<Control> _Control = new List<Control>();
void Page_Init(object sender, EventArgs e)
{
if (RenderOnlyPage)
{
// parcours récursif sur tous les controles de la page
CheckContentPlaceHolderRecursive(this);
// suppression de tous les controles de la page
// pour ensuite rajouter nos contentPlaceHolder
this.Controls.Clear();
foreach (Control c in _Control)
this.Controls.Add(c);
}
}
/// <summary>
/// fonction recursive, qui fouille dans les controles de la page pour trouver
/// un ContentPlaceHolder
/// </summary>
/// <param name="control"></param>
private void CheckContentPlaceHolderRecursive(Control control)
{
if (control is System.Web.UI.WebControls.ContentPlaceHolder)
{
if (RenderOnlyOneContentPlaceHolder == string.Empty )
_Control.Add(control);
else if (control.ID == RenderOnlyOneContentPlaceHolder)
_Control.Add(control);
}
else if (control.Controls.Count > 0)
foreach (Control c in control.Controls)
CheckContentPlaceHolderRecursive(c);
}
/// <summary>
/// Cette méthode déclenche un evenement, si un control ayant besoin d'une balise form
/// (c'est le cas des controles avec postback) est absent.
/// En surchargeant cette méthode on passe outre cette limitation.
/// </summary>
/// <param name="control"></param>
public override void VerifyRenderingInServerForm(Control control)
{
if (!RenderOnlyPage)
base.VerifyRenderingInServerForm(control);
}
}
} |
Partager