Dans la meme optique que cette source : http://www.aspfr.com/code.aspx?ID=34070, j'avais besoin de recuperer le contenu de la page sans le masterpage associé.
imaginons que vous avez une page default.aspx et une master page, default.master, dans default.master vous avez des UserControl un peu de partout car commun a toutes les pages, et dans default.aspx vous avez juste le texte "bonjour le monde". Quand vous allez sur http://localhost/default.aspx, le texte "bonjour le monde" ainsi que tous les userControl du master apparait. Ce que vous avez envie vous c'est de recuperer juste "bonjour le monde", donc annuler la masterPage.
La solution est assez simple, il suffit de créer une classe dérivant de System.Web.UI.page, et ensuite de faire dériver vos page de cette nouvelle classe.
Qu'apporte en plus cette nouvelle classe ?
2 propriétés :
RenderOnlyPage (boolean) : si elle est vrai, alors la page ne comportera pas le masterpage
RenderOnlyOneContentPlaceHolder (string) : il faut spécifier le contentPlaceHolderID que vous voulez afficher, par défaut la propriété est à string.Empty, et cela affichera tout les ContentPlaceHolder
La classe fonctionne simplement, dans le page_init, je regarde si on doit afficher le master, si non, je vais parcourir recursivement tout les controls de la page, et je vais supprimer tout ce qui n'est pas ContentPlaceHolder.
Comme sur ma précedente source j'ai surchargé VerifyRenderingInServerForm pour ne pas être embeté avec l'absence de balise form.
Pour se servir de la classe c'est bien simple, faites dériver vos pages de CSLib.Web.UI.Page
public partial class Default : CSLib.Web.UI.Page
{
protected void page_PreInit(object sender, EventArgs e)
{
Boolean RenderOnlyPage = false;
Boolean.TryParse(Request.QueryString["nomaster"], out RenderOnlyPage);
this.RenderOnlyPage = RenderOnlyPage;
this.RenderOnlyOneContentPlaceHolder = "ContentPlaceHolder1";
}
}
dans ce cas, si ma requete est default.aspx la page entiere va s'afficher (avec la masterpage) et si la requete est default.aspx?nomaster=true, la page s'affichera sans le masterpage :)