Есть разные наборы контролов. Они сгруппированы на страничках в боксах. Как отделить многократно используемую разметку этого бокса (div'ы с закруглениями и прочее) от самих контролов. Нужно что-то типа MasterPage только не для страницы целиком, а для конкретного участка страницы. Как такое делается?
Идеальным было бы создание контрола типа asp:Panel, в который можно накидать других вещей и при Rendering он окружал бы их своими тегами которые брал из "МasterControlPage".
Здравствуйте, Lloyd, Вы писали:
L>Почитай в msdn-е про ITemplate.
Да спасибо, направили в нужном направлении. И я набрел на схожее обсуждение
Шаблонный UserControlАвтор: mogadanez
Дата: 07.04.05
Впринципе начал использовать способ описанный в последнем посте этого топика с ControlCollection и asp:Placeholder, впринципе это позволяет использовать мой пользовательский контрол с разметкой и декларативно определять в нем содержиое.
Только при таком подходе имеются проблемы с сохранением состояния вложенных контролов. То есть вложенные контролы не записывают свое ViewState
в коде
Шаблонный UserControlАвтор: mogadanez
Дата: 07.04.05
От: Александр Игрушкин
Дата: 08.04.05 11:10
Оценка: 41 (2)
Пишем так:
control.ascx
<table border=1>
<tr>
<td>this is the left cell</td>
<td><asp:Placeholder runat=server id=contentPlace/></td>
</tr>
</table>
control.ascx.cs
public class DialogPage : System.Web.UI.UserControl
{
public DialogPage()
{
_content = new ControlCollection( this );
}
protected PlaceHolder contentPlace;
protected override void OnLoad( EventArgs e )
{
foreach( Control control in _content )
contentPlace.Controls.Add( control );
base.OnLoad( e );
}
private ControlCollection _content;
public ControlCollection Content
{
get { return _content; }
}
}
и использование:
<a:DialogPage runat=server>
<Content>
<asp:Label ID=test_label Text="7777" Runat=server/>
</Content>
</a:DialogPage>
cs:
public class DialogUsageSample : System.Web.UI.Page
{
protected Label test_label;
private void Page_Load(object sender, System.EventArgs e)
{
test_label.Text = "777777777777777777"; // метка существует!!!!!
}
}
Замечание, пожелания?
Надо поменять
protected override void OnLoad( EventArgs e )
на
protected override void OnInit( EventArgs e )
{
base.onInit(e);
и тогда все работает исключительно!
Ну если не считать проблем с отображением данного контрола в визуальном редакторе.