Стоит задача создать механизм позволяющий легко изменять оформление сайта (asp.net приложения).
Вот обычная страница default.aspx, которая содержит контрол, который отображает внутри заданного HTML-оформления (шаблона) все что лежит между тегами
<body></body>
<%@ Page Language="c#" codeBehind="default.aspx.cs" AutoEventWireup="false" Inherits="CompanyName.CustomPage" %>
<%@ Register TagPrefix="example" TagName="template" Src="/include/templates/template1.ascx"%>
<example:template title="net" runat="server" id="template">
<body>
<h1>Hello world!</h1>
</body>
</example:template>
Статическое содержание показывается безупречно, динамические страницы без параметров — тоже.
У меня проблема с тем, что если внутри этого контрола вставить другие контролы, например
<asp:TextBox>
Код:
<%@ Page Language="c#" codeBehind="default.aspx.cs" AutoEventWireup="false" Inherits="CompanyName.CustomPage" %>
<%@ Register TagPrefix="example" TagName="template" Src="/include/templates/template.ascx"%>
<example:template title="net" runat="server" id="template">
<body>
<h1>Hello world!</h1>
<asp:TextBox id="TextBox1" runat="server">
</body>
</example:template>
...я не могу обратиться к этим контролам.
Вопрос:
Как к этим контролам обращаться, как изменить их состояние, содержимое?
Я в обработчике
Page_Load для страницы (в default.aspx.cs в
Page_Load) побежался по всем контролам — но
TextBox1 там нет! Мой контрол есть template, а его дочерних (
TextBox1) нет.
Код default.aspx.cs
private void Page_Load(object sender, System.EventArgs e)
{
exploreControls(this);
}
private void exploreControls(Control ctrl)
{
Response.Output.Write("<li>" + ctrl.ToString() + ctrl.UniqueID + ctrl.ClientID + ctrl.HasControls);
if(ctrl.Controls.Count > 0)
{
Response.Output.Write("<ul>");
for(int i = 0; i < ctrl.Controls.Count; i++ )
exploreControls(ctrl.Controls[i]);
Response.Output.Write("</ul>");
}
}
Предположение: может в момент вызова
Page_Load для страницы дочерние элементы моего контрола еще не созданы?
(кстати
Page_Load для контрола их тоже не видит)
В каком месте программы я могу извлечть значения контрола
TextBox1 по
IsPostBack?
Буду благодарен за любую помощь...
Может кто порекомендует, как можно еще создать шаблон оформления с минимизацией
повторяемого кода внутри страниц.
Спасибо.