Шаблоны оформления релизованный на контролах)
От: ketoff  
Дата: 10.12.04 08:04
Оценка:
Стоит задача создать механизм позволяющий легко изменять оформление сайта (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?
Буду благодарен за любую помощь...

Может кто порекомендует, как можно еще создать шаблон оформления с минимизацией повторяемого кода внутри страниц.

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.