quinta-feira, maio 31, 2007

Identificar o ContentPlaceHolder

Hoje dei por algo que considero uma falha no asp .NET 2.0. Imagine-se que se tem uma master page muito simples parecida com o seguinte:

&lt div &gt
&lt asp:contentplaceholder id="place1" runat="server" / &gt
&lt asp:contentplaceholder id="place2" runat="server" / &gt
&lt /div &gt
...

E agora tem-se uma página que usa esta master page também muito simples:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.cs" Inherits="_Default" %>

&lt asp:content contentplaceholderid="place1" runat="server" id="p1" / &gt
&lt asp:content contentplaceholderid="place2" runat="server" id="p2"/ &gt

A falha é a seguinte todos os controlos em aspx desde que sejam runat="server" podem ser acedidos no code behind através do seu ID, porque raio os controlos do tipo asp:Content são diferentes de todos os outros e não podem ser acedidos? É necessário fazer algo do género:

&lt asp:content contentplaceholderid="place1" runat="server" id="p1" &gt
&lt asp:placeholder runat="server" id="este_e_visto" / &gt
&lt /asp:Content &gt

E pode-se agora aceder ao objecto "este_e_visto", para chegar ao simples objectivo de colocar conteúdo dentro do objecto asp:Content.

Sem comentários: