Qual é a diferença entre <asp:Panel >
e <asp:PlaceHolder >
no ASP.NET?
Quando você deve usar um sobre o outro?
Qual é a diferença entre <asp:Panel >
e <asp:PlaceHolder >
no ASP.NET?
Quando você deve usar um sobre o outro?
Respostas:
Um painel se expande para um intervalo (ou uma div), com seu conteúdo. Um espaço reservado é apenas isso, um espaço reservado que é substituído pelo que você colocar nele.
O espaço reservado não renderiza nenhuma tag para si mesmo, portanto, é ótimo para agrupar conteúdo sem a sobrecarga de tags HTML externas.
O Painel possui tags HTML externas, mas possui algumas propriedades extras interessantes.
BackImageUrl: obtém / define o URL da imagem de plano de fundo do painel
HorizontalAlign: Obtém / Define o
alinhamento horizontal do conteúdo do pai
Há um bom artigo no startvbnet aqui .
Use o controle PlaceHolder como um contêiner para armazenar controles de servidor que são adicionados dinamicamente à página da Web. O controle PlaceHolder não produz nenhuma saída visível e é usado apenas como um contêiner para outros controles na página da Web. Você pode usar a Control.Controls
coleção para adicionar, inserir ou remover um controle no controle PlaceHolder.
O controle Panel é um contêiner para outros controles . É especialmente útil quando você deseja gerar controles programaticamente, ocultar / mostrar um grupo de controles ou localizar um grupo de controles.
A Direction
propriedade é útil para localizar o conteúdo de um controle Panel para exibir texto para idiomas escritos da direita para a esquerda, como árabe ou hebraico.
O controle Panel fornece várias propriedades que permitem personalizar o comportamento e a exibição de seu conteúdo. Use a BackImageUr
propriedade l para exibir uma imagem personalizada para o controle Panel. Use a ScrollBars
propriedade para especificar barras de rolagem para o controle.
Pequenas diferenças ao renderizar HTML: um controle PlaceHolder renderizará nada, mas o controle Panel será renderizado como a <div>
.
Mais informações nos fóruns do ASP.NET
Eu bug estranho * no visual studio 2010, se você colocar controles dentro de um espaço reservado, ele não os renderiza no modo de exibição de design.
Isto é especialmente verdade para os rótulos Hidenfields e Empty.
Eu adoraria usar espaços reservados em vez de painéis, mas odeio o fato de não poder colocar outros controles dentro de espaços reservados em tempo de design na GUI.
Como mencionado em outras respostas, o Painel gera um <div>
em HTML, enquanto o PlaceHolder não. Mas há muitas outras razões pelas quais você pode escolher uma delas.
Por que um PlaceHolder?
Como ele não gera nenhuma tag própria, você pode usá-lo com segurança dentro de outro elemento que não possa conter um <div>
, por exemplo:
<table>
<tr>
<td>Row 1</td>
</tr>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</table>
Você também pode usar um PlaceHolder para controlar a Visibilidade de um grupo de Controles sem envolvê-lo em um <div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</asp:PlaceHolder>
Por que um painel
Ele gera o seu próprio <div>
e também pode ser usado para agrupar um grupo de controles. Mas um painel tem muito mais propriedades que podem ser úteis para formatar seu conteúdo:
<asp:Panel ID="Panel1" runat="server" Font-Bold="true"
BackColor="Green" ForeColor="Red" Width="200"
Height="200" BorderColor="Black" BorderStyle="Dotted">
Red text on a green background with a black dotted border.
</asp:Panel>
Mas o recurso mais útil é a DefaultButton
propriedade Quando o ID corresponde a um botão no painel, ele aciona uma postagem de formulário com validação quando enter
pressionada dentro de uma caixa de texto. Agora, um usuário pode enviar o formulário sem pressionar o botão.
<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="Input is required" ValidationGroup="myValGroup"
Display="Dynamic" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="myValGroup" />
</asp:Panel>
Experimente o trecho acima pressionando enter
dentroTextBox1