ASP.NET В чем разница между RenderContents и RenderControl, вызываемыми на каждом из base.Controls?
В приложении, с которым я работаю, я обнаружил, что управление ведет себя очень странно. Контроль происходит от System.Web.UI.WebControls.WebControl
и объявляется с [ParseChildren(false)]
так что это должно позволить дочерние элементы управления. Проблема заключалась в том, что это было только рендеринг элементов управления, которые имели runat="server"
атрибут указан. Все статические части HTML были пропущены:
<mylib:somecontrol ID="test" runat="server">
<div> this does not render! </div>
<div id="whatever" runat="server"> but this does </div>
</mylib:somecontrol>
Я обнаружил, что элемент управления делал это, чтобы отобразить его содержимое:
foreach (Control control in this.Controls)
{
control.RenderControl(writer);
}
Я считал, что статические биты HTML, а также все интервалы должны быть включены как LiteralControl
случаи в this.Controls
поэтому было неожиданно увидеть, что проблема решена после замены этого кода следующей строкой:
base.RenderContents(writer);
Вопрос в том, что RenderContents
делает это по-другому?