Портирование старых страниц для использования мастер-страниц - PullRequest
1 голос
/ 06 сентября 2010

У меня есть сотни устаревших веб-страниц, добавляющих верхний и нижний колонтитулы через переопределение BasePage Render

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

Новые страницы используют MasterPage для поведения по умолчанию.

Хотелось бы узнать, возможно ли добавить элемент управления содержимым asp: из базовой страницы без изменения каждого * .aspx?

Я сделал небольшой тест, который работает, пока в 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
}

Но как только я добавлю что-то к исходному коду, я получу: Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, которая ссылается на главную страницу.

Я не уверен, но думаю, что переопределение ControlCollection Controls могло бы помочь, но я не нашел решения.

1 Ответ

0 голосов
/ 23 мая 2011

Это не легко исправить, но я закончил с массовым поиском и заменой в старой базе кода.Это заняло пару дней, но я думаю, что это стоило усилий, поскольку каждая страница теперь работает с одной и той же кодовой базой.Это всегда будет напоминать мне, что сохранение переднего конца СУХОГО столь же важно, как и забота о заднем конце.

...