Динамическое добавление элементов управления из события после Page_Init - PullRequest
0 голосов
/ 14 мая 2010

Может показаться глупым заголовком, поскольку вам не следует добавлять динамические элементы управления после Page_Init, если вы хотите сохранить ViewState, но я не мог придумать лучшего способа объяснения проблемы.

У меня есть класс, подобный следующему:

public class WebCustomForm : WebControl, IScriptControl
{
    internal CustomRender Content
    {
        get
        {
            object content = this.Page.Session[this.SESSION_CONTENT_TRACKER];
            return content as CustomRender;
        }
        private set
        {
            this.Page.Session[this.SESSION_CONTENT_TRACKER] = value;
        }
    }
}

CustomRender - это абстрактный класс, который реализует ITemplate, который я использую для самостоятельного содержания модуля CustomForms, который находится в процессе написания.

На Page_Init страницы, содержащей WebCustomForm, я инициализирую элемент управления, передавая ему соответствующие идентификаторы. Затем в переопределенном методе OnInit WebCustomForm я вызываю Instantiate для элемента управления CustomRender, который в данный момент активен:

if (this.Content != null)
{
     this.Content.InstantiateIn(this);
}

Проблема в том, что моим CustomRender элементам управления требуется возможность изменить CustomRender элемент управления WebCustomForm. Но когда срабатывают события, которые запускаются в CustomRender, событие Page_Init, очевидно, уже прошло. Итак, мой вопрос: как я могу изменить содержимое WebCustomForm из динамически добавленного элемента управления внутри него?

Как я вижу, у меня есть три варианта:

  1. Я разделяю CustomRender элементы управления в одиночку контроль и в основном имеют aspx страница на элемент управления и обрабатывать События себя на странице (хотя Я надеялся просто сделать контроль Я захожу на страницу и забываю про)
  2. Я не использую события и просто продолжаю запрашивая текущую страницу, но с разными параметрами запроса
  3. Я возвращаюсь к чертежной доске с любые лучшие предложения кто-нибудь может дай мне.

Ответы [ 2 ]

0 голосов
/ 18 мая 2010

Я выбрал вариант 1. Я покончил с общим контролем и просто создал отдельные элементы управления, которые должны размещаться на разных страницах. Я добавил свойства для получения URL-адресов Postback и создал свойства Session для передачи идентификаторов между элементами управления, поэтому мне не нужно полагаться на RequestParams.

0 голосов
/ 18 мая 2010

Почему бы не сделать это в событии InitComplete. Это происходит после инициализации страницы, но до загрузки состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...