Переопределение DataBind на пользовательский контроль, предостережения? - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть пользовательское свойство для пользовательского элемента управления, которое имеет несколько состояний / режимов. Если это свойство установлено на родительской странице: я хотел бы, чтобы мой элемент управления обновлялся автоматически. Использование свойства при загрузке страницы не работает, поскольку оно не инициировано.

Я могу представить 3 способа сделать это:

  1. В свойстве я мог бы добавить блок кода, который будет вызывать this.DataBind ().
  2. Я мог бы добавить код, переопределив виртуальный метод DataBind.
  3. Я мог бы создать открытый проприетарный метод Update.

Я хотел бы получить любой вклад в то, что является лучшей практикой в ​​целом. Более того, я решил переопределить виртуальный метод DataBind. Мой псевдокод таков:

    public override void DataBind()
{
      if (SpecialMode)
       {
        .. load from database

       }
      base.DataBind()
    }

Я заинтересован в упорядочении базы. DataBind (). Я видел, что обычно он помещается первым, но после загрузки данных из базы данных: мне нужно привязать данные, чтобы отобразить данные.

Любой вклад в эти соображения будет принят с благодарностью.

Чтобы быть ясным:

Этот элемент управления является виджетом опроса. Обычно он выполняет поиск и загрузку опроса для отображения из события Page_Load. Но он также имеет режим отчетов, который позволяет странице, в которую встроен элемент управления, изменять идентификатор опроса для отображения. Это свойство не будет инициировано в Page_Load. Хорошо, часть этого беспорядка состоит в том, что у меня есть свойство для объекта, а также дублированное свойство для ViewState, но только Id.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2010

Ваш пользовательский элемент управления может обрабатывать автоматическую привязку данных в событии PreRender. Когда свойство Id изменяется (или любое другое свойство, которое запускает автоматическую привязку данных), вы можете установить флаг в элементе управления, который позже проверяется в PreRender, чтобы указать, что данные должны быть загружены.

В качестве альтернативы, вместо установки флага вы могли бы очистить все данные, которые вы уже загрузили из ViewState, и реализовать логику в PreRender, чтобы сказать «Если данных нет, тогда загрузите их».

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

0 голосов
/ 22 сентября 2010

Ваш контроль никоим образом не должен зависеть от страницы, на которой он встроен.Вместо этого имейте свойство "AutoUpdate" в элементе управления и задайте его на странице.На странице также должны быть установлены свойства, указывающие элементу управления, как обновлять, когда установлено свойство AutoUpdate.

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