2010-09-06 4 views
1

J'ai des centaines de pages Webform existants en ajoutant en-tête et pied de page via un BasePage remplaçant renduvieilles pages de portage utiliser MasterPages

protected override void Render(HtmlTextWriter writer) 
    { 
     RenderHeader(writer); 
     base.Render(writer); 
     RenderFooter(writer); 
    } 

nouvelles pages utilise un MasterPage pour le comportement par défaut.

Je voudrais savoir s'il est possible d'ajouter le contrôle asp: content depuis BasePage sans changer tous les * .aspx?

J'ai fait un petit test qui fonctionne tant il n'y a pas de contenu dans le ASPX

public partial class OldPage : Page 
{ 
    private MainContentTemplate mainContentTemplate; 

    protected override void OnPreInit(EventArgs e) 
    { 
     Page.MasterPageFile = "~/Site.Master"; 

     mainContentTemplate = new MainContentTemplate();    
     AddContentTemplate("Main", mainContentTemplate); 

     base.OnPreInit(e); 
    } 
} 

public class MainContentTemplate : ITemplate 
{ 
    #region ITemplate Members 

    void ITemplate.InstantiateIn(Control container) 
    { 

     container.Controls.Add(new LiteralControl("Test string")); 
    } 

    #endregion 
} 

Mais dès que j'ajouter quelque chose au code devant je recevrai: Les contrôles de contenu doivent être top- des contrôles de niveau dans une page de contenu ou une page maître imbriquée faisant référence à une page maître.

Je ne suis pas sûr mais je pense que le contrôle de ControlCollection de dépassement pourrait aider, mais je n'ai pas trouvé une solution.

Répondre

0

Ce n'est pas une solution facile, mais j'ai fini par faire une recherche massive et remplacer dans l'ancienne base de code. Cela a pris quelques jours, mais je pense que cela en valait la peine car chaque page fonctionne maintenant sur la même base de code. Cela me rappellera toujours qu'il est tout aussi important de garder l'avant DRY que de prendre soin de l'arrière.