Стоит задача создать механизм позволяющий легко изменять оформление сайта (asp.net приложения).
Вот обычная страница default.aspx, которая содержит контрол, который отображает внутри заданного HTML-оформления (шаблона) все что лежит между тегами <body></body>
Статическое содержание показывается безупречно, динамические страницы без параметров — тоже.
У меня проблема с тем, что если внутри этого контрола вставить другие контролы, например <asp:TextBox>
...я не могу обратиться к этим контролам.
Вопрос:
Как к этим контролам обращаться, как изменить их состояние, содержимое?
Я в обработчике Page_Load для страницы (в default.aspx.cs в Page_Load) побежался по всем контролам — но TextBox1 там нет! Мой контрол есть template, а его дочерних (TextBox1) нет.
Предположение: может в момент вызова Page_Load для страницы дочерние элементы моего контрола еще не созданы?
(кстати Page_Load для контрола их тоже не видит)
В каком месте программы я могу извлечть значения контрола TextBox1 по IsPostBack?
Буду благодарен за любую помощь...
Может кто порекомендует, как можно еще создать шаблон оформления с минимизацией повторяемого кода внутри страниц.
Здравствуйте, Grey-, Вы писали: G>Здравствуйте, ketoff, Вы писали: G>ВОспользуйся поиском по форуму, эту праблему не раз обсуждали, а на Page_Load темплейт ещё не подгрузился поэтому его там нет
Спасибо, Grey. первым делом я поискал, конечно.
И даже вопрос в один из тех топиков кинул — безответно.
Но все же рискну продолжить...
вот класс шаблона template.ascx.cs
public abstract class Template : UserControl, INamingContainer
{
[ParseChildren(true)]
protected System.Web.UI.WebControls.PlaceHolder bodyContainer;
// ... тут обявлены контролы общие для всех страниц (меню и прочее)private ITemplate main;
public ITemplate Body
{
get { return this.main; }
set { this.main = value; }
}
public void LoadChildControls()
{
this.EnsureChildControls();
}
protected override void CreateChildControls()
{
// здесь заполняются контролы общие для всех страниц (меню и прочее)if( null != this.Body ) // здесь помещаем содержимое страницы, то что внутри тегов body в плейсхолдер bodyContainerthis.Body.InstantiateIn(bodyContainer);
}
// ... прикладной код
}
template.ascx файл шаблона:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="template.ascx.cs" Inherits="Example.Includes.Template" %>
<!--HTML-код и общие для сайта контролы-->
<asp:placeholder id="bodyContainer" runat="server"></asp:placeholder>
<!--HTML-код и общие для сайта контролы-->
Вопрос:
Если внутри Body содержатся контролы они будут вообще распознаны? или они воспринимаются как текст и не парсятся?
Re[3]: Шаблоны оформления релизованный на контролах)
Здравствуйте, ketoff, Вы писали:
K>...я не могу обратиться к этим контролам. K>Вопрос: K>Как к этим контролам обращаться, как изменить их состояние, содержимое?
Для получени ссылки на объект по его ID следует воспользоваться функцией FindControl. При этом нужно учитывать, что FindControl ищет в пределах одного INamingContainer.
Re[3]: Шаблоны оформления релизованный на контролах)
Как вариант использования контролов для офрмления дизайна можно воспользоваться таким методом:
1-ый контрол вставляет теги head, title, etc.
2-ой второй ричует менюшку и создает табдицу с открытой строкой <tr><td>
....
Здесь контент
..........
3-й закрывает строку и таблицу
Здравствуйте, ketoff, Вы писали:
K>Стоит задача создать механизм позволяющий легко изменять оформление сайта (asp.net приложения). K>Вот обычная страница default.aspx, которая содержит контрол, который отображает внутри заданного HTML-оформления (шаблона) все что лежит между тегами <body></body>
K>
K>Статическое содержание показывается безупречно, динамические страницы без параметров — тоже. K>У меня проблема с тем, что если внутри этого контрола вставить другие контролы, например <asp:TextBox>
K>Код: K>
K>...я не могу обратиться к этим контролам. K>Вопрос: K>Как к этим контролам обращаться, как изменить их состояние, содержимое? K>Я в обработчике Page_Load для страницы (в default.aspx.cs в Page_Load) побежался по всем контролам — но TextBox1 там нет! Мой контрол есть template, а его дочерних (TextBox1) нет.
K>Код default.aspx.cs
K>
K>Предположение: может в момент вызова Page_Load для страницы дочерние элементы моего контрола еще не созданы? K>(кстати Page_Load для контрола их тоже не видит) K>В каком месте программы я могу извлечть значения контрола TextBox1 по IsPostBack? K>Буду благодарен за любую помощь...
K>Может кто порекомендует, как можно еще создать шаблон оформления с минимизацией повторяемого кода внутри страниц.
K>Спасибо.
Re[2]: Шаблоны оформления релизованный на контролах)
Здравствуйте, BorisD,
Но в этом случае код контролов будет присутствовать на каждой aspx странице?
Это можно сравнить с <#include file="">?
Я правильно понял?