Какая разница между Render и RenderControl в создании WebControl?

Недавно я научился писать свои собственные WebControls, но я все еще неясен в отношении различий между Render и RenderControl. Я начал использовать Render, но в какой-то момент я начал использовать RenderControl, который я сейчас использую исключительно. Если я создаю плохую привычку, я бы хотел зажать ее в почке, прежде чем я установлю свои пути.

Ответы

Ответ 1

RenderControl используется, если существует существующий элемент управления, который обеспечивает то, что вы хотите, чтобы вы могли использовать то, как это визуализируется.

Render используется, если вам нужно полностью контролировать способ отображения html.

Вы можете, конечно, объединить два для наиболее оптимального использования вашего времени программирования...

Ответ 2

Здесь хорошо читайте: Render vs RenderControl

Выдержка из ссылок:

Метод Render позволяет контроллер, чтобы сделать себя, написав Вывод HTML в поток ответов. Это дает ссылку на Объект HTMLTextWriter, который может писать непосредственно к потоку ответов. Эта метод следует использовать при получении непосредственно из управления.

Используется метод RenderControlна странице, чтобы сделать каждого человека контроль. Это позволяет потребителю ваш класс, чтобы отобразить его, и вы можете использовать его для отображения дочерних элементов управления, если вы используете составной элемент управления. Также следует отметить, что это не будет вызываться, если видимость свойство на элементе управления установлено на ложь.

Ответ 3

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

RenderControl - это общедоступный метод, который позволяет вам вызвать метод Render, когда захотите. Вы использовали бы это, скажем, в пользовательском элементе управления, где вы храните элементы управления в ControlsCollection, но хотите визуализировать их в своей собственной ячейке в таблице. Например:

   writer.Write(""):
   foreach(Control ctl in Controls)
   {
      writer.Write("")
      ctl.RenderControl(writer);
      writer.Write("");
   }
   writer.Write("");

Вы всегда должны переопределять Render, а не RenderControl, поскольку он вызывается в жизненном цикле событий (как я уже сказал)

(из http://forums.asp.net/t/909220.aspx/1, извините, мой ответ - это просто копирование и вставка, но я не видел много переписывания таких кристально чистых объяснение)

Я все еще не понимаю, почему MS не просто делает Render() общедоступным методом. Почему необходим отдельный RenderControl()? Причин для этого отсутствует во всех ответах, данных до сих пор. Первый человек, который может объяснить это, получает блестящее преимущество.

Ответ 4

RenderControl используется для отображения дочерних элементов. Render позволяет индивидуальному управлению отображать себя.