Разметка и Элементы управления
От: vmalyshe  
Дата: 17.08.10 14:40
Оценка:
Есть разные наборы контролов. Они сгруппированы на страничках в боксах. Как отделить многократно используемую разметку этого бокса (div'ы с закруглениями и прочее) от самих контролов. Нужно что-то типа MasterPage только не для страницы целиком, а для конкретного участка страницы. Как такое делается?

Идеальным было бы создание контрола типа asp:Panel, в который можно накидать других вещей и при Rendering он окружал бы их своими тегами которые брал из "МasterControlPage".
Re: Разметка и Элементы управления
От: Lloyd Россия  
Дата: 17.08.10 14:43
Оценка:
Здравствуйте, vmalyshe, Вы писали:

V>Есть разные наборы контролов. Они сгруппированы на страничках в боксах. Как отделить многократно используемую разметку этого бокса (div'ы с закруглениями и прочее) от самих контролов. Нужно что-то типа MasterPage только не для страницы целиком, а для конкретного участка страницы. Как такое делается?


V>Идеальным было бы создание контрола типа asp:Panel, в который можно накидать других вещей и при Rendering он окружал бы их своими тегами которые брал из "МasterControlPage".


Почитай в msdn-е про ITemplate.
Re[2]: Разметка и Элементы управления
От: vmalyshe  
Дата: 17.08.10 20:15
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Почитай в msdn-е про ITemplate.


Да спасибо, направили в нужном направлении. И я набрел на схожее обсуждение Шаблонный UserControl
Автор: mogadanez
Дата: 07.04.05
Впринципе начал использовать способ описанный в последнем посте этого топика с ControlCollection и asp:Placeholder, впринципе это позволяет использовать мой пользовательский контрол с разметкой и декларативно определять в нем содержиое.
Re[3]: Разметка и Элементы управления
От: vmalyshe  
Дата: 20.08.10 06:12
Оценка:
Только при таком подходе имеются проблемы с сохранением состояния вложенных контролов. То есть вложенные контролы не записывают свое ViewState
viewstate
Re[4]: Разметка и Элементы управления
От: vmalyshe  
Дата: 22.08.10 09:06
Оценка:
в коде Шаблонный 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);

и тогда все работает исключительно!
Ну если не считать проблем с отображением данного контрола в визуальном редакторе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.